﻿// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder

#ifndef NPC_HPP
#define NPC_HPP

#include <map>
#include <vector>

#include <common/database.hpp>
#include <common/timer.hpp>
#include <config/core.hpp>

#include "clif.hpp" //
#include "map.hpp" // struct block_list
#include "status.hpp" // struct status_change
#include "unit.hpp" // struct unit_data
#include "navi.hpp" // navi stuff

struct block_list;
struct npc_data;
struct view_data;

struct npc_timerevent_list {
	int timer,pos;
};

struct npc_label_list {
	char name[NAME_LENGTH+1];
	int pos;
};

/// Item list for NPC sell/buy list
struct npc_item_list {
	t_itemid nameid;
	unsigned int value;
#if PACKETVER >= 20131223
	int32 qty; ///< Stock counter (Market shop)
	uint8 flag; ///< 1: Item added by npcshopitem/npcshopadditem, force load! (Market shop)
#endif
};

/// List of bought/sold item for NPC shops
struct s_npc_buy_list {
	int32 qty;		///< Amount of item will be bought
	uint32 nameid;	///< ID of item will be bought
};

struct s_stylist_costs{
	uint32 price;
	t_itemid requiredItem;
	t_itemid requiredItemBox;
};

struct s_stylist_entry{
	uint16 look;
	int16 index;
	uint32 value;
	std::shared_ptr<s_stylist_costs> human;
	std::shared_ptr<s_stylist_costs> doram;
};

struct s_stylist_list{
	uint16 look;
	std::unordered_map<int16, std::shared_ptr<s_stylist_entry>> entries;
};

class StylistDatabase : public TypesafeYamlDatabase<uint32, s_stylist_list>{
private:
	bool parseCostNode( std::shared_ptr<s_stylist_entry> entry, bool doram, const ryml::NodeRef& node );

public:
	StylistDatabase() : TypesafeYamlDatabase( "STYLIST_DB", 1 ){

	}

	const std::string getDefaultLocation() override;
	uint64 parseBodyNode( const ryml::NodeRef& node ) override;
};

extern StylistDatabase stylist_db;

struct s_npc_barter_requirement{
	uint16 index;
	t_itemid nameid;
	uint16 amount;
	int8 refine;
};

struct s_npc_barter_item{
	uint16 index;
	t_itemid nameid;
	bool stockLimited;
	uint32 stock;
	uint32 price;
	std::map<uint16, std::shared_ptr<s_npc_barter_requirement>> requirements;
};

struct s_npc_barter{
	std::string name;
	int16 m;
	uint16 x;
	uint16 y;
	uint8 dir;
	int16 sprite;
	std::map<uint16, std::shared_ptr<s_npc_barter_item>> items;
	int32 npcid;

	~s_npc_barter();
};

class BarterDatabase : public TypesafeYamlDatabase<std::string, s_npc_barter>{
public:
	BarterDatabase() : TypesafeYamlDatabase( "BARTER_DB", 1 ){

	}

	const std::string getDefaultLocation();
	uint64 parseBodyNode( const ryml::NodeRef& node );
	void loadingFinished();
};

extern BarterDatabase barter_db;

struct s_barter_purchase{
	std::shared_ptr<s_npc_barter_item> item;
	uint32 amount;
	item_data* data;
};

struct s_questinfo {
	e_questinfo_types icon;
	e_questinfo_markcolor color;
	struct script_code* condition;

	~s_questinfo(){
		if( this->condition != nullptr ){
			script_free_code( this->condition );
		}
	}
};

// Status of NPC view.
enum e_npcv_status : uint8 {
	NPCVIEW_DISABLE  = 0x01,
	NPCVIEW_ENABLE   = 0x02,
	NPCVIEW_HIDEOFF  = 0x04,
	NPCVIEW_HIDEON   = 0x08,
	NPCVIEW_CLOAKOFF = 0x10,
	NPCVIEW_CLOAKON  = 0x20,

	NPCVIEW_VISIBLE   = NPCVIEW_ENABLE | NPCVIEW_HIDEOFF | NPCVIEW_CLOAKOFF,
	NPCVIEW_INVISIBLE = NPCVIEW_DISABLE | NPCVIEW_HIDEON | NPCVIEW_CLOAKON,
	NPCVIEW_CLOAK     = NPCVIEW_CLOAKOFF | NPCVIEW_CLOAKON,
};

#ifdef Pandas_Redeclaration_Struct_Event_Data
struct event_data {
	struct npc_data* nd;
	int pos;
};
#endif // Pandas_Redeclaration_Struct_Event_Data

struct npc_data {
	struct block_list bl;
	struct unit_data ud; //Because they need to be able to move....
	struct view_data vd;
	status_change sc; //They can't have status changes, but.. they want the visual opt values.
	struct npc_data *master_nd;
	short class_,speed;
	char name[NPC_NAME_LENGTH+1];// display name
	char exname[NPC_NAME_LENGTH+1];// unique npc name
	int chat_id,touching_id;
	unsigned int next_walktime;
	int instance_id;
	e_npcv_status state{NPCVIEW_ENABLE};

	unsigned size : 2;

	struct status_data status;
	unsigned int level,stat_point;
	struct s_npc_params {
		pec_ushort str, agi, vit, int_, dex, luk;
	} params;

	void* chatdb; // pointer to a npc_parse struct (see npc_chat.cpp)
	char* path;/* path dir */
	enum npc_subtype subtype;
	bool trigger_on_hidden;
	int src_id;
	union {
		struct {
			struct script_code *script;
			short xs,ys; // OnTouch area radius
			int guild_id;
			t_tick timer;
			int timerid,timeramount,rid;
			t_tick timertick;
			struct npc_timerevent_list *timer_event;
			int label_list_num;
			struct npc_label_list *label_list;
		} scr;
		struct {
			struct npc_item_list *shop_item;
			uint16 count;
			t_itemid itemshop_nameid; // Item Shop cost item ID
			char pointshop_str[32]; // Point Shop cost variable name
#ifdef Pandas_Support_Pointshop_Variable_DisplayName
			// --------------------------------------------------------------------------
			// 提醒: 针对 npc_data.u.shop 中添加的内容, 需要在复制 npc 的时候也同时进行复制
			// 涉及到的函数有 npc.cpp 的 npc_parse_duplicate 和 copynpc 脚本指令 [Sola丶小克]
			// --------------------------------------------------------------------------
			char pointshop_str_nick[64]; // 用于保存变量的昵称, 以便呈现给玩家
#endif // Pandas_Support_Pointshop_Variable_DisplayName
			bool discount;
		} shop;
		struct {
			short xs,ys; // OnTouch area radius
			short x,y; // destination coords
			unsigned short mapindex; // destination map
		} warp;
		struct {
			struct mob_data *md;
			time_t kill_time;
			char killer_name[NAME_LENGTH];
			int spawn_timer;
#ifdef Pandas_FuncParams_Mob_MvpTomb_Create
			int killer_gid;
#endif // Pandas_FuncParams_Mob_MvpTomb_Create
		} tomb;
		struct {
			bool extended;
		} barter;
	} u;

	struct sc_display_entry **sc_display;
	unsigned char sc_display_count;

	std::vector<std::shared_ptr<s_questinfo>> qi_data;

	struct {
		t_tick timeout;
		unsigned long color;
	} progressbar;

	struct{
		uint32 owner_char_id;
		t_tick last_interaction;
		int removal_tid;
	} dynamicnpc;

#ifdef MAP_GENERATOR
	struct navi_link navi; // for warps and the src of npcs
	std::vector<navi_link> links; // for extra links, like warper npc
#endif
	bool is_invisible;

#ifdef Pandas_ScriptCommand_ShowVend
	struct {
		char message[NAME_LENGTH + 1];
		bool show;
	} vendingboard;
#endif // Pandas_ScriptCommand_ShowVend

#ifdef Pandas_Struct_Npc_Data_Pandas
	struct {
#ifdef Pandas_Struct_Npc_Data_DestructionStrategy
		int destruction_strategy;	// 记录当前 NPC 的自毁策略 ( 0 - 不自毁; 1 - 最后一个对话结束时自毁)
		int destruction_timer = INVALID_TIMER; // 记录当前 NPC 的立刻自毁计时器
#endif // Pandas_Struct_Npc_Data_DestructionStrategy
	} pandas;
#endif // Pandas_Struct_Npc_Data_Pandas

#ifdef Pandas_Struct_Unit_CommonData
	struct s_unit_common_data ucd;
#endif // Pandas_Struct_Unit_CommonData
};

struct eri;
extern struct eri *npc_sc_display_ers;

#define START_NPC_NUM 110000000

enum e_job_types
{
	NPC_RANGE1_START = 44,
	JT_WARPNPC,
	JT_1_ETC_01,
	JT_1_M_01,
	JT_1_M_02,
	JT_1_M_03,
	JT_1_M_04,
	JT_1_M_BARD,
	JT_1_M_HOF,
	JT_1_M_INNKEEPER,
	JT_1_M_JOBGUIDER,
	JT_1_M_JOBTESTER,
	JT_1_M_KNIGHTMASTER,
	JT_1_M_LIBRARYMASTER,
	JT_1_M_MERCHANT,
	JT_1_M_ORIENT01,
	JT_1_M_PASTOR,
	JT_1_M_PUBMASTER,
	JT_1_M_SIZ,
	JT_1_M_SMITH,
	JT_1_M_WIZARD,
	JT_1_M_YOUNGKNIGHT,
	JT_1_F_01,
	JT_1_F_02,
	JT_1_F_03,
	JT_1_F_04,
	JT_1_F_GYPSY,
	JT_1_F_LIBRARYGIRL,
	JT_1_F_MARIA,
	JT_1_F_MERCHANT_01,
	JT_1_F_MERCHANT_02,
	JT_1_F_ORIENT_01,
	JT_1_F_ORIENT_02,
	JT_1_F_ORIENT_03,
	JT_1_F_ORIENT_04,
	JT_1_F_PRIEST,
	JT_1_F_PUBGIRL,
	JT_4_DOG01,
	JT_4_KID01,
	JT_4_M_01,
	JT_4_M_02,
	JT_4_M_03,
	JT_4_M_04,
	JT_4_M_BARBER,
	JT_4_M_ORIENT01,
	JT_4_M_ORIENT02,
	JT_4_F_01,
	JT_4_F_02,
	JT_4_F_03,
	JT_4_F_04,
	JT_4_F_MAID,
	JT_4_F_SISTER,
	JT_4W_KID,
	JT_4W_M_01,
	JT_4W_M_02,
	JT_4W_M_03,
	JT_4W_SAILOR,
	JT_4W_F_01,
	JT_8_F,
	JT_8_F_GRANDMOTHER,
	JT_EFFECTLAUNCHER,
	JT_8W_SOLDIER,
	JT_1_M_MOC_LORD,
	JT_1_M_PAY_ELDER,
	JT_1_M_PRON_KING,
	JT_4_M_MANAGER,
	JT_4_M_MINISTER,
	JT_HIDDEN_NPC,
	JT_4_F_KAFRA6,
	JT_4_F_KAFRA5,
	JT_4_F_KAFRA4,
	JT_4_F_KAFRA3,
	JT_4_F_KAFRA2,
	JT_4_F_KAFRA1,
	JT_2_M_THIEFMASTER,
	JT_2_M_SWORDMASTER,
	JT_2_M_PHARMACIST,
	JT_2_M_MOLGENSTEIN,
	JT_2_M_DYEINGER,
	JT_2_F_MAGICMASTER,
	JT_4_F_TELEPORTER,
	JT_4_M_TELEPORTER,
	NPC_RANGE1_END,

	JT_HIDDEN_WARP_NPC = 139,

	NPC_RANGE2_START = 400,
	JT_4_M_MUT2,
	JT_4_M_SCIENCE,
	JT_4_F_VALKYRIE2,
	JT_4_M_UNCLEKNIGHT,
	JT_4_M_YOUNGKNIGHT,
	JT_2_MONEMUS,
	JT_4_M_ATEIL,
	JT_4_F_ANNIVERSARY,
	JT_4_M_GREATPO,
	JT_4_M_NOVELIST,
	JT_4_M_CHAMPSOUL,
	JT_4_M_OLDFRIAR,
	JT_4_M_CRU_SOLD,
	JT_4_M_CRU_KNT,
	JT_4_M_CRU_HEAD,
	JT_4_M_CRU_CRUA,
	JT_4_M_KY_SOLD,
	JT_4_M_KY_KNT,
	JT_4_M_KY_HEAD,
	JT_4_M_KY_KIYOM,
	JT_4_M_BOSSCAT,
	JT_4_M_BABYCAT,
	JT_4W_F_KAFRA2,
	JT_4_F_MUNAK,
	JT_4_M_BONGUN,
	JT_4_BEAR,
	JT_4_BLUEWOLF,
	JT_4_PECOPECO,
	JT_4_M_JP_MID,
	JT_4_M_JP_RUN,
	JT_4_ORCLADY,
	JT_4_ORCLADY2,
	JT_4_ORCWARRIOR,
	JT_4_ORCWARRIOR2,
	JT_4_F_FAIRY,
	JT_4_F_FAIRYKID,
	JT_4_F_FAIRYKID2,
	JT_4_F_FAIRYKID3,
	JT_4_F_FAIRYKID4,
	JT_4_F_FAIRYKID5,
	JT_4_F_FAIRYKID6,
	JT_4_M_FAIRYKID,
	JT_4_M_FAIRYKID2,
	JT_4_M_FAIRYKID3,
	JT_4_M_FAIRYKID4,
	JT_4_M_FAIRYKID5,
	JT_4_M_FAIRYSOLDIER,
	JT_4_M_TUFFOLD,
	JT_4_MAN_BENKUNI,
	JT_4_MAN_GALTUN,
	JT_4_MAN_JERUTOO,
	JT_4_MAN_LAVAIL,
	JT_4_MAN_NITT,
	JT_4_MAN_PIOM,
	JT_4_MAN_PIOM2,
	JT_4_M_DSTMAN,
	JT_4_M_DSTMANDEAD,
	JT_4_BABYLEOPARD,
	JT_4_M_REDSWORD,
	JT_4_MAN_PIOM3,
	JT_4_M_FAIRYSOLDIER2,
	JT_4_F_FAIRYSOLDIER,
	JT_4_DRAGON_EGG,
	JT_4_MIMIC,
	JT_4_F_FAIRY1,
	JT_4_F_GUILLOTINE,
	JT_4_M_GUILLOTINE,
	JT_4_M_KNIGHT_BLACK,
	JT_4_M_KNIGHT_GOLD,
	JT_4_M_KNIGHT_SILVER,
	JT_4_SKULL_MUD,
	JT_4_M_BRZ_INDIAN,
	JT_4_F_BRZ_INDIAN,
	JT_4_F_BRZ_INDOLD,
	JT_4_M_BRZ_JACI,
	JT_4_M_BRZ_MAN1,
	JT_4_M_BRZ_MAN2,
	JT_4_F_BRZ_WOMAN,
	JT_4_M_MINSTREL,
	JT_4_M_MINSTREL1,
	JT_4_M_SHADOWCHASER,
	JT_4_F_SHADOWCHASER,
	JT_4_M_SURA,
	JT_4_F_SURA,
	JT_4_F_WANDERER,
	JT_4_M_BARD,
	JT_1_FLAG_NOFEAR,
	JT_4_M_NOFEARGUY,
	JT_4_MAN_PIOM6,
	JT_4_MAN_PIOM4,
	JT_4_MAN_PIOM5,
	JT_4_MAN_GALTUN1,
	JT_4_HUMAN_GERUTOO,
	JT_4_M_ROKI,
	JT_4_M_MERCAT1,
	JT_4_M_MERCAT2,
	JT_4_M_CATMAN1,
	JT_4_M_CATMAN2,
	JT_4_F_BRZ_WOMAN2,
	JT_4_M_JP_DISH,
	JT_4_F_JP_NOAH,
	JT_4_F_JP_OZ,
	JT_4_F_JP_CHROME,
	JT_4_F_JP_RINNE,
	JT_4_WHITETIGER,
	JT_4_VENDING_MACHINE,
	JT_4_MISTY,
	JT_4_NECORING,
	JT_4_ELEPHANT,
	JT_4_F_NYDHOG,
	JT_4_F_NYDHOG2,
	JT_4_M_ROKI2,
	JT_4_M_DOGTRAVELER,
	JT_4_M_DOGTRAVELER2,
	JT_4_F_DOGTRAVELER,
	JT_4_M_RAFLE_GR,
	JT_4_M_RAFLE_OLD,
	JT_4_F_RAFLE_PK,
	JT_4_M_LYINGDOG,
	JT_4_F_MORAFINE1,
	JT_4_F_MORAFINE2,
	JT_4_M_RAFLE_OR,
	JT_4_F_RAFLE_YE,
	JT_4_M_RAFLE_VI,
	JT_4_F_RAFLE_VI,
	JT_4_M_ARDHA,
	JT_4_CREEPER,
	JT_JP_RUFAKU,
	JT_JP_SUPIKA,
	JT_JP_SABIKU,
	JT_JP_ARUGORU,
	JT_JP_ARUNA,
	JT_JP_AIRI,
	JT_4_M_DEWOLDMAN,
	JT_4_M_DEWOLDWOMAN,
	JT_4_M_DEWMAN,
	JT_4_M_DEWWOMAN,
	JT_4_M_DEWBOY,
	JT_4_M_DEWGIRL,
	JT_4_M_DEWZATICHIEF,
	JT_4_M_DEWZATIMAN,
	JT_4_M_ALCHE_E,
	JT_4_MASK_SMOKEY,
	JT_4_CAT_SAILOR1,
	JT_4_CAT_SAILOR2,
	JT_4_CAT_SAILOR3,
	JT_4_CAT_SAILOR4,
	JT_4_CAT_CHEF,
	JT_4_CAT_MERMASTER,
	JT_4_CRACK,
	JT_4_ASTER,
	JT_4_F_STARFISHGIRL,
	JT_4_CAT_DOWN,
	JT_4_CAT_REST,
	JT_4_CAT_3COLOR,
	JT_4_CAT_ADMIRAL,
	JT_4_SOIL,
	JT_4_F_ALCHE_A,
	JT_4_CAT_ADV1,
	JT_4_CAT_ADV2,
	JT_4_CAT_SAILOR5,
	JT_2_DROP_MACHINE,
	JT_2_SLOT_MACHINE,
	JT_2_VENDING_MACHINE1,
	JT_MOB_TOMB,
	JT_4_MYSTCASE,
	JT_4_M_SIT_NOVICE,
	JT_4_OCTOPUS_LEG,
	JT_4_F_NURSE,
	JT_4_MAL_SOLDIER,
	JT_4_MAL_CAPTAIN,
	JT_4_MAL_BUDIDAI,
	JT_4_M_MAYOR,
	JT_4_M_BARYO_OLD,
	JT_4_F_BARYO_OLD,
	JT_4_F_BARYO_GIRL,
	JT_4_M_BARYO_BOY,
	JT_4_M_BARYO_MAN,
	JT_4_F_BARYO_WOMAN,
	JT_4_BARYO_CHIEF,
	JT_4_MAL_KAFRA,
	JT_4_M_MALAYA,
	JT_4_F_MALAYA,
	JT_4_F_PATIENT,
	JT_4_M_PATIENT,
	JT_4_F_KR_TIGER,
	JT_4_M_KR_BOY,
	JT_4_M_KAGE_OLD,
	JT_4_WHIKEBAIN,
	JT_4_EREND,
	JT_4_RAWREL,
	JT_4_ARMAIA,
	JT_4_KAVAC,
	JT_4_YGNIZEM,
	JT_4_EREMES,
	JT_4_MAGALETA,
	JT_4_KATRINN,
	JT_4_SHECIL,
	JT_4_SEYREN,
	JT_4_HARWORD,
	JT_4_F_JP_CYNTHIA,
	JT_4_M_JP_GUSTON,
	JT_4_M_JP_BERKUT,
	JT_4_F_JP_DARK_ADELAIDE,
	JT_4_M_JP_DARK_DARIUS,
	JT_4_M_JP_JESTER,
	JT_XMAS_SMOKEY_B,
	JT_XMAS_SMOKEY_R,
	JT_XMAS_SMOKEY_Y,
	JT_4_F_CLOCKDOLL,
	JT_4_F_FAIRY2,
	JT_4_F_PINKWOMAN,
	JT_4_FAIRYDEADLEAF,
	JT_4_FROG,
	JT_4_M_BLACKMAN,
	JT_4_M_BLUEMAN,
	JT_4_M_FAIRYANG,
	JT_4_M_FAIRYAVANT,
	JT_4_M_FAIRYFREAK,
	JT_4_M_FAIRYKID6,
	JT_4_M_FAIRYSCHOLAR,
	JT_4_M_FAIRYSCHOLAR_DIRTY,
	JT_4_M_FARIY_HISIE,
	JT_4_M_FARIYKING,
	JT_4_M_NEWOZ,
	JT_4_M_OLIVER,
	JT_4_M_PROFESSORWORM,
	JT_4_M_REDMAN,
	JT_4_F_GELKA,
	JT_4_M_ROTERT,
	JT_4_BLACKDRAGON,
	JT_4_M_GUNSLINGER,
	JT_4_F_GUNSLINGER,
	JT_4_M_ARCHER,
	JT_4_M_SWORDMAN,
	JT_4_M_NINJA_RED,
	JT_4_M_NINJA_BLUE,
	JT_4_M_THIEF_RUMIN,
	JT_4_M_NOV_RUMIN,
	JT_4_F_MAYSEL,
	JT_4_F_ACOLYTE,
	JT_4_M_NOV_HUNT,
	JT_4_F_GENETIC,
	JT_4_F_TAEKWON,
	JT_4_F_SWORDMAN,
	JT_4_F_IU,
	JT_4_M_RAGI,
	JT_4_M_MELODY,
	JT_4_TRACE,
	JT_4_F_HIMEL,
	JT_4_LEVITATEMAN,
	JT_4_M_HEINRICH,
	JT_4_M_ROYALGUARD,
	JT_4_M_BARMUND,
	JT_4_F_KHALITZBURG,
	JT_4_F_HIMEL2,
	JT_4_WHITEKNIGHT,
	JT_4_COCO,
	JT_4_M_ALADDIN,
	JT_4_M_GENIE,
	JT_4_F_GENIE,
	JT_4_JP_MID_SWIM,
	JT_4_JP_RUNE_SWIM,
	JT_4_F_FENRIR,
	JT_4_F_GEFFEN_FAY,
	JT_4_F_IRIS,
	JT_4_F_LUCILE,
	JT_4_F_SARAH_BABY,
	JT_4_GEFFEN_01,
	JT_4_GEFFEN_02,
	JT_4_GEFFEN_03,
	JT_4_GEFFEN_04,
	JT_4_GEFFEN_05,
	JT_4_GEFFEN_06,
	JT_4_GEFFEN_07,
	JT_4_GEFFEN_08,
	JT_4_GEFFEN_09,
	JT_4_GEFFEN_10,
	JT_4_GEFFEN_11,
	JT_4_GEFFEN_12,
	JT_4_GEFFEN_13,
	JT_4_GEFFEN_14,
	JT_4_M_CHAOS,
	JT_4_M_CHIEF_IRIN,
	JT_4_M_SAKRAY,
	JT_4_M_SAKRAYROYAL,
	JT_4_TOWER_01,
	JT_4_TOWER_02,
	JT_4_TOWER_03,
	JT_4_TOWER_04,
	JT_4_TOWER_05,
	JT_4_TOWER_06,
	JT_4_TOWER_07,
	JT_4_TOWER_08,
	JT_4_TOWER_09,
	JT_4_TOWER_10,
	JT_4_TOWER_11,
	JT_4_TOWER_12,
	JT_4_TOWER_13,
	JT_8_F_GIRL,
	JT_4_F_GODEMOM,
	JT_4_F_GON,
	JT_4_F_KID2,
	JT_4_M_BIBI,
	JT_4_M_GEF_SOLDIER,
	JT_4_M_KID1,
	JT_4_M_MOC_SOLDIER,
	JT_4_M_PAY_SOLDIER,
	JT_4_M_SEAMAN,
	JT_4_M_SNOWMAN,
	JT_4_F_05,
	JT_4_M_05,
	JT_4_M_06,
	JT_4_F_06,
	JT_4_M_PIERROT,
	JT_4_M_KID2,
	JT_4_F_KID3,
	JT_4_M_SANTA,
	JT_4_F_NACORURI,
	JT_4_F_SHAMAN,
	JT_4_F_KAFRA7,
	JT_GUILD_FLAG,
	JT_1_SHADOW_NPC,
	JT_4_F_07,
	JT_4_F_JOB_ASSASSIN,
	JT_4_F_JOB_BLACKSMITH,
	JT_4_F_JOB_HUNTER,
	JT_4_F_JOB_KNIGHT,
	JT_4_F_NOVICE,
	JT_4_M_JOB_ASSASSIN,
	JT_4_M_JOB_BLACKSMITH,
	JT_4_M_JOB_HUNTER,
	JT_4_M_JOB_KNIGHT1,
	JT_4_M_JOB_KNIGHT2,
	JT_4_M_JOB_WIZARD,
	JT_4_BAPHOMET,
	JT_4_DARKLORD,
	JT_4_DEVIRUCHI,
	JT_8_DOPPEL,
	JT_2_M_ALCHE,
	JT_2_M_BARD_ORIENT,
	JT_2_M_SAGE_B,
	JT_2_M_SAGE_OLD,
	JT_4_F_ALCHE,
	JT_4_F_CRU,
	JT_4_F_MONK,
	JT_4_F_ROGUE,
	JT_4_M_ALCHE_A,
	JT_4_M_ALCHE_B,
	JT_4_M_ALCHE_C,
	JT_4_M_CRU,
	JT_4_M_CRU_OLD,
	JT_4_M_MONK,
	JT_4_M_SAGE_A,
	JT_4_M_SAGE_C,
	JT_4_F_SON,
	JT_4_F_JPN2,
	JT_4_F_JPN,
	JT_4_F_JPNCHIBI,
	JT_4_F_JPNOBA2,
	JT_4_F_JPNOBA,
	JT_4_M_JPN2,
	JT_4_M_JPN,
	JT_4_M_JPNCHIBI,
	JT_4_M_JPNOJI2,
	JT_4_M_JPNOJI,
	JT_8_M_JPNSOLDIER,
	JT_8_M_JPNMASTER,
	JT_4_F_JPNMU,
	JT_4_F_TWGIRL,
	JT_4_F_TWGRANDMOM,
	JT_4_F_TWMASKGIRL,
	JT_4_F_TWMIDWOMAN,
	JT_4_M_TWBOY,
	JT_4_M_TWMASKMAN,
	JT_4_M_TWMIDMAN,
	JT_4_M_TWOLDMAN,
	JT_4_M_TWTEAMAN,
	JT_4_M_YOYOROGUE,
	JT_8_M_TWSOLDIER,
	JT_4_F_UMGIRL,
	JT_4_F_UMOLDWOMAN,
	JT_4_F_UMWOMAN,
	JT_4_M_UMCHIEF,
	JT_4_M_UMDANCEKID2,
	JT_4_M_UMDANCEKID,
	JT_4_M_UMKID,
	JT_4_M_UMOLDMAN,
	JT_4_M_UMSOLDIER,
	JT_4_M_SALVATION,
	JT_4_F_NFDEADKAFRA,
	JT_4_F_NFDEADMGCIAN,
	JT_4_F_NFLOSTGIRL,
	JT_4_M_NFDEADMAN2,
	JT_4_M_NFDEADMAN,
	JT_4_M_NFDEADSWDMAN,
	JT_4_M_NFLOSTMAN,
	JT_4_M_NFMAN,
	JT_4_NFBAT,
	JT_4_NFCOCK,
	JT_4_NFCOFFIN,
	JT_4_NFWISP,
	JT_1_F_SIGNZISK,
	JT_1_M_SIGN1,
	JT_1_M_SIGNALCHE,
	JT_1_M_SIGNART,
	JT_1_M_SIGNMCNT,
	JT_1_M_SIGNMONK2,
	JT_1_M_SIGNMONK,
	JT_1_M_SIGNROGUE,
	JT_4_F_VALKYRIE,
	JT_TW_TOWER,
	JT_2_M_OLDBLSMITH,
	JT_4_F_CHNDOCTOR,
	JT_4_F_CHNDRESS1,
	JT_4_F_CHNDRESS2,
	JT_4_F_CHNDRESS3,
	JT_4_F_CHNWOMAN,
	JT_4_M_CHN8GUEK,
	JT_4_M_CHNCOOK,
	JT_4_M_CHNGENERL,
	JT_4_M_CHNMAN,
	JT_4_M_CHNMONK,
	JT_4_M_CHNOLD,
	JT_4_M_CHNSOLDIER,
	JT_4_M_DWARF,
	JT_4_M_GRANDMONK,
	JT_4_M_ROGUE,
	JT_4_M_DOMINO,
	JT_4_F_DOMINO,
	JT_4_F_ZONDAGIRL,
	JT_4_M_REIDIN_KURS,
	JT_4_M_ZONDAOYAJI,
	JT_4_M_BUDDHIST,
	JT_2_BOARD1,
	JT_2_BOARD2,
	JT_2_BULLETIN_BOARD,
	JT_4_F_THAIAYO,
	JT_4_F_THAIGIRL,
	JT_4_F_THAISHAMAN,
	JT_4_M_THAIAYO,
	JT_4_M_THAIOLD,
	JT_4_M_THAIONGBAK,
	JT_CLEAR_NPC,
	JT_4_F_RACING,
	JT_4_F_EINOLD,
	JT_4_M_EINOLD,
	JT_4_M_EINMINER,
	JT_4_M_DIEMAN,
	JT_4_F_EINWOMAN,
	JT_4_M_REPAIR,
	JT_4_M_EIN_SOLDIER,
	JT_4_M_YURI,
	JT_4_M_EINMAN2,
	JT_4_M_EINMAN,
	JT_2_F_SIGN1,
	JT_4_BOARD3,
	JT_4_BULLETIN_BOARD2,
	JT_4_F_AGENTKAFRA,
	JT_4_F_KAFRA8,
	JT_4_F_KAFRA9,
	JT_4_F_LGTGIRL,
	JT_4_F_LGTGRAND,
	JT_4_F_OPERATION,
	JT_4_LGTSCIENCE,
	JT_4_M_LGTGRAND,
	JT_4_M_LGTGUARD2,
	JT_4_M_LGTGUARD,
	JT_4_M_LGTMAN,
	JT_4_M_LGTPOOR,
	JT_4_M_OPERATION,
	JT_4_M_PRESIDENT,
	JT_4_M_REINDEER,
	JT_4_M_ZONDAMAN,
	JT_4_M_PECOKNIGHT,
	JT_4_CAT,
	JT_4_F_YUNYANG,
	JT_4_M_OILMAN,
	JT_4_F_CAPEGIRL,
	JT_4_M_MASKMAN,
	JT_4_M_SITDOWN,
	JT_4_F_SITDOWN,
	JT_4_M_ALCHE_D,
	JT_4_M_ACROSS,
	JT_4_F_ACROSS,
	JT_4_COOK,
	JT_4_M_LIEMAN,
	JT_2_POSTBOX,
	JT_4_BULL,
	JT_4_LAM,
	JT_4_F_HUGIRL,
	JT_4_F_HUGRANMA,
	JT_4_F_HUWOMAN,
	JT_4_F_KHELLISIA,
	JT_4_F_KHELLY,
	JT_4_M_HUBOY,
	JT_4_M_HUGRANFA,
	JT_4_M_HUMAN_01,
	JT_4_M_HUMAN_02,
	JT_4_M_HUMERCHANT,
	JT_4_M_HUOLDARMY,
	JT_4_M_KHKIEL,
	JT_4_M_KHKYEL,
	JT_4_M_KHMAN,
	JT_4_F_KHWOMAN,
	JT_4_F_KHGIRL,
	JT_4_M_KHBOY,
	JT_4_M_PHILMAN,
	JT_4_PORING,
	JT_2_COLAVEND,
	JT_4_F_SOCCER,
	JT_4_M_SOCCER7,
	JT_4_M_SOCCER9,
	JT_4_F_CHILD,
	JT_4_F_MADAME,
	JT_4_F_MASK1,
	JT_4_F_MASK,
	JT_4_F_RACHOLD,
	JT_4_F_SHABBY,
	JT_4_F_TRAINEE,
	JT_4_M_CHILD1,
	JT_4_M_CHILD,
	JT_4_M_DOCTOR,
	JT_4_M_FROZEN1,
	JT_4_M_FROZEN,
	JT_4_M_MASK1,
	JT_4_M_MASK,
	JT_4_M_MIDDLE1,
	JT_4_M_MIDDLE,
	JT_4_M_RACHMAN2,
	JT_4_M_RACHMAN1,
	JT_4_M_RACHOLD1,
	JT_4_M_RACHOLD,
	JT_4_M_RASWORD,
	JT_4_M_TRAINEE,
	JT_4_F_ARUNA_POP,
	JT_4_M_ARUNA_NFM1,
	JT_4_DST_CAMEL,
	JT_4_DST_SOLDIER,
	JT_4_F_DESERT,
	JT_4_F_DST_CHILD,
	JT_4_F_DST_GRAND,
	JT_4_M_DESERT,
	JT_4_M_DST_CHILD,
	JT_4_M_DST_GRAND,
	JT_4_M_DST_MASTER,
	JT_4_M_DST_TOUGH,
	JT_4_ANGELING,
	JT_4_ARCHANGELING,
	JT_4_GHOSTRING,
	JT_4_F_EDEN_MASTER,
	JT_4_F_EDEN_OFFICER,
	JT_4_M_EDEN_GUARDER,
	JT_4_M_PATRICK,
	JT_4_DONKEY,
	JT_4_M_TRISTAN,
	JT_4_WHITE_COW,
	JT_4_F_RUSCHILD,
	JT_4_F_RUSWOMAN1,
	JT_4_F_RUSWOMAN2,
	JT_4_F_RUSWOMAN3,
	JT_4_M_RUSCHILD,
	JT_4_M_GUSLIMAN,
	JT_4_M_RUSBALD,
	JT_4_M_RUSKING,
	JT_4_M_RUSKNIGHT,
	JT_4_M_RUSMAN1,
	JT_4_M_RUSMAN2,
	JT_4_M_DRAKE,
	JT_4_F_BABAYAGA,
	JT_4_F_RUSGREEN,
	JT_4_RUS_DWOLF,
	JT_1_FLAG_LION,
	JT_1_FLAG_EAGLE,
	JT_4_M_MIKID,
	JT_4_BLUE_FLOWER,
	JT_4_RED_FLOWER,
	JT_4_YELL_FLOWER,
	JT_4_F_CAVE1,
	JT_4_F_MUT1,
	JT_4_F_MUT2,
	JT_4_F_SCIENCE,
	JT_4_M_1STPRIN1,
	JT_4_M_1STPRIN2,
	JT_4_M_2NDPRIN1,
	JT_4_M_2NDPRIN2,
	JT_4_M_3RDPRIN1,
	JT_4_M_3RDPRIN2,
	JT_4_M_4THPRIN1,
	JT_4_M_4THPRIN2,
	JT_4_M_5THPRIN1,
	JT_4_M_5THPRIN2,
	JT_4_M_6THPRIN1,
	JT_4_M_6THPRIN2,
	JT_4_M_CASMAN1,
	JT_4_M_CAVE1,
	JT_4_M_MOCASS1,
	JT_4_M_MOCASS2,
	JT_4_M_MUT1,
	NPC_RANGE2_END, // Official JT_MON_BEGIN

	NPC_RANGE3_START = 10000, // Official JT_NEW_NPC_3RD_BEGIN
	JT_4_TOWER_14,
	JT_4_TOWER_15,
	JT_4_TOWER_16,
	JT_4_TOWER_17,
	JT_4_TREASURE_BOX,
	JT_ACADEMY_MASTER,
	JT_PORTAL,
	JT_THANATOS_BATTLE,
	JT_THANATOS_KEEP,
	JT_4_F_LYDIA,
	JT_4_LUDE,
	JT_4_ALIZA,
	JT_4_ALICE,
	JT_4_ARCHER_SKEL,
	JT_4_JACK,
	JT_4_SOLDIER_SKEL,
	JT_4_LOLI_RURI,
	JT_4_M_SAKRAY_TIED,
	JT_4_M_ANTONIO,
	JT_4_M_COOKIE,
	JT_4_M_BELIEVER01,
	JT_4_F_BELIEVER01,
	JT_4_M_BELIEVER02,
	JT_4_ROPEPILE,
	JT_4_BRICKPILE,
	JT_4_WOODPILE,
	JT_4_M_TAMARIN,
	JT_4_M_DEATH,
	JT_4_GHOST_STAND,
	JT_4_GHOST_COLLAPSE,
	JT_4_COOKIEHOUSE,
	JT_4_F_SKULL06GIRL,
	JT_4_NONMYSTCASE,
	JT_4_F_KIMI,
	JT_4_M_FROZEN_GC,
	JT_4_M_FROZEN_KN,
	JT_4_SNAKE_LORD,
	JT_4_F_MOCBOY,
	JT_4_F_RUNAIN,
	JT_4_M_ROEL,
	JT_4_F_SHALOSH,
	JT_4_ENERGY_RED,
	JT_4_ENERGY_BLUE,
	JT_4_ENERGY_YELLOW,
	JT_4_ENERGY_BLACK,
	JT_4_ENERGY_WHITE,
	JT_4_F_PERE01,
	JT_4_JITTERBUG,
	JT_4_SEA_OTTER,
	JT_4_GALAPAGO,
	JT_4_DESERTWOLF_B,
	JT_4_BB_PORING,
	JT_4_F_CHARLESTON01,
	JT_4_F_CHARLESTON02,
	JT_4_F_CHARLESTON03,
	JT_4_M_IAN,
	JT_4_M_OLDSCHOLAR,
	JT_4_F_LAPERM,
	JT_4_M_DEBON,
	JT_4_M_BIRMAN,
	JT_4_F_SHAM,
	JT_4_M_REBELLION,
	JT_4_F_REBELLION,
	JT_4_CHN_SHAOTH,
	JT_4_SHOAL,
	JT_4_F_SARAH,
	JT_4_GIGANTES_BIG,
	JT_4_GIGANTES,
	JT_4_GIGANTES_SMALL,
	JT_4_GARGOYLE_STATUE,
	JT_4_AIRA,
	JT_4_EZELLA,
	JT_4_KULUNA,
	JT_4_LUNE,
	JT_4_MALLINA,
	JT_4_MORIN,
	JT_4_NASARIN,
	JT_4_F_BERRYTEA,
	JT_4_F_FRUIT,
	JT_4_SCR_MT_ROBOTS,
	JT_4_MACHINE_DEVICE,
	JT_4_GC109,
	JT_4_SYS_MSG,
	JT_4_M_TATIO,
	JT_4_M_REKENBER,
	JT_4_XMAS_CAT1,
	JT_4_XMAS_CAT2,
	JT_4_XMAS_CAT3,
	JT_4_XMAS_CAT4,
	JT_4_XMAS_CAT5,
	JT_4_XMAS_CAT6,
	JT_4_M_DEATH2,
	JT_4_S_KADOMATSU,
	JT_4_B_KADOMATSU,
	JT_4_F_08,
	JT_4_F_08_STATUE,
	JT_4_M_DARKPRIEST,
	JT_4_JP_GARM_H,
	JT_4_JP_MEDUSA_H,
	JT_4_CHN_GVG_01,
	JT_4_SPRING_RABBIT,
	JT_4_PD_TYRA,
	JT_4_PD_TYRANOS,
	JT_4_PD_PLESI,
	JT_4_PD_PLESIO,
	JT_4_PD_BRACHI,
	JT_4_PD_BRACHIOS,
	JT_4_PD_GOLDDRAGON,
	JT_4_PD_ZAEROG,
	JT_4_PD_TAMADORA,
	JT_4_JP_EDGA_H,
	JT_4_JP_BRAGOLEM_H,
	JT_4_EL_AQUA,
	JT_4_EP16_NIHIL,
	JT_4_EP16_SPICA,
	JT_4_EP16_SKIA,
	JT_4_EP16_PETER,
	JT_4_EP16_CRUX,
	JT_4_EP16_GRANZ,
	JT_4_EP16_STOLZ,
	JT_4_EP16_EGEO,
	JT_4_EP16_COOK,
	JT_4_EP16_MARK,
	JT_4_EP16_TAMARIN,
	JT_4_EP16_POE,
	JT_4_EP16_ISAAC,
	JT_4_EP16_HELMUT,
	JT_4_EP16_WOLF,
	JT_4_EP16_MEYER,
	JT_4_EP16_AGNES,
	JT_4_EP16_FOOD,
	JT_4_EP16_LOUVIERE,
	JT_4_EP16_MAX,
	JT_4_EP16_SPIEGEL,
	JT_4_MOONLIGHT,
	JT_4_MISTRESS,
	JT_4_DRACULA,
	JT_4_STORMKNIGHT,
	JT_4_TATTER,
	JT_4_AS_RAGGED_GOLEM,
	JT_4_AS_BLOODY_KNIGHT,
	JT_4_AS_WIND_GHOST,
	JT_4_F_BIJOU,
	JT_4_EP16_COOK2,
	JT_4_SERVICE_30_M_01,
	JT_4_SERVICE_30_F_01,
	JT_4_SCR_AT_ROBOTS,
	JT_4_F_RANGER,
	JT_4_WAG,
	JT_4_NPC_TRAP,
	JT_4_RAGGLER,
	JT_4_DR_PEPE,
	JT_4_DR_GAMBERI,
	JT_4_DR_AGLIO,
	JT_4_DR_OLIO,
	JT_4_DR_STELO,
	JT_4_DR_TORTEL,
	JT_4_BASIL_SLAVE,
	JT_4_DOU_JINDO,
	JT_4_DOU_SIBA,
	JT_4_TARUTUPI,
	JT_4_DR_SOLDIER,
	JT_4_DR_M_01,
	JT_4_DR_M_02,
	JT_4_DR_F_01,
	JT_4_DR_F_02,
	JT_4_DR_KID_01,
	JT_4_JP_2015EVT,
	JT_4_ALLIGATOR,
	JT_4_ANOLIAN,
	JT_4_TACNU,
	JT_4_CENERE,
	JT_4_F_ARUNA_POP2,
	JT_4_JACK_HEAD,
	JT_4_INJUSTICE,
	JT_4_BLOODYMAN,
	JT_4_GIBBET,
	JT_4_DULLAHAN,
	JT_4_M_LAZY,
	JT_4_M_GONY,
	JT_4_M_ROOKIE,
	JT_4_M_PHILOFONTES,
	JT_4_F_ESTLOVELOY,
	JT_4_F_LEEDSH,
	JT_4_F_DIENE,
	JT_4_F_COATNEIS,
	JT_4_M_RUPERT,
	JT_4_M_FALLENGONY,
	JT_4_M_EISEN,
	JT_4_F_DEADEVIL,
	JT_4_F_HUNTER_EVIL,
	JT_4_F_ELENA,
	JT_4_F_ANYA,
	JT_4_M_SEIREN_UC,
	JT_4_M_GUNSLINGER2,
	JT_4_M_GUNSLINGER3,
	JT_4_M_REBELLION2,
	JT_4_M_REBELLION3,
	JT_4_F_GUNSLINGER2,
	JT_4_F_GUNSLINGER3,
	JT_4_F_REBELLION2,
	JT_4_F_REBELLION3,
	JT_4_M_ILYA,

	JT_4_ELDER = 10205,
	JT_4_LUNATIC,
	JT_4_F_NOVICE2,
	JT_4_WICKEDNYMPH,
	JT_4_F_PREMI,
	JT_4_M_COSTELL,
	JT_4_M_YATTWARP,
	JT_4_M_EVOKASCUDI,
	JT_4_M_JOHNNYJAMES,
	JT_4_M_ALBERTFORD,
	JT_4_M_SEANMCCURDY,
	JT_4_M_KARAMPUCCI,
	JT_4_M_CACTUSMAN1,
	JT_4_M_CACTUSMAN2,
	JT_4_M_CACTUSMAN3,
	JT_4_M_CACTUSLADY,
	JT_4_M_GAST,
	JT_4_M_CACTUSCHILD,
	JT_4_KING,
	JT_4_F_BOMI,
	JT_4_M_CACTUSCHIEF,
	JT_4_F_CACTUSCHILD2,
	JT_4_F_CACTUSLADY2,
	JT_4_F_CACTUSLADY3,
	JT_4_M_CACTUS,
	JT_4_M_COWRAIDERS1,
	JT_4_M_COWRAIDERS2,
	JT_4_M_COWRAIDERS3,
	JT_4_F_JP14THEVT,
	JT_4_M_POORSCHOLAR,
	JT_4_M_PEPPERROTI,
	JT_JP_NPC01,
	JT_4_PURPLE_WARP,
	JT_4_F_NARIN,
	JT_4_M_URGENT_MAN,
	JT_4_M_KEEN_SOLDIER,
	JT_4_F_SLOPPY_WOMAN,
	JT_4_F_DRKAFRA01,
	JT_4_M_DRZONDA01,
	JT_4_M_SWD_RENO,
	JT_4_M_KNG_RENO,
	JT_4_M_AC_RUMIN,
	JT_4_M_HIGH_WIZARD,
	JT_4_SYSTEM_BOX,
	JT_4_STEELBOX,
	JT_4_WOODBOX,
	JT_4_M_POPFESTA,
	JT_4_BONFIRE,
	JT_4_PCCOUNT,
	JT_4_LAVAGOLEM,
	JT_4_F_IA,
	JT_4_LOCKE,
	JT_4_LIL_LIF,
	JT_4_LIL_LIF2,
	JT_4_F_DRAGONHAT,
	JT_4_M_DRAGONHAT,
	JT_JP_NPC02,
	JT_JP_NPC03,
	JT_JP_NPC04,
	JT_JP_NPC05,
	JT_JP_NPC06,
	JT_JP_NPC07,
	JT_JP_NPC08,
	JT_JP_NPC09,
	JT_JP_NPC10,
	JT_4_FIRERING,
	JT_4_SCATLETON,
	JT_4_JP_AB_NPC_001,
	JT_4_JP_AB_NPC_002,
	JT_4_JP_AB_NPC_003,
	JT_4_JP_AB_NPC_004,
	JT_4_JP_AB_NPC_005,
	JT_4_JP_AB_NPC_006,
	JT_4_JP_AB_NPC_007,
	JT_4_JP_AB_NPC_008,
	JT_4_JJAK,
	JT_4_M_SNOWMAN_B,
	JT_4_M_SNOWMAN_R,
	JT_4_M_SNOWMAN_G,
	JT_WARPEFFECTNPC,
	JT_4_HEN,
	JT_4_F_DANGDANG,
	JT_4_M_DANGDANG,
	JT_4_F_DANGDANG1,
	JT_4_LEAFCAT,
	JT_4_NASARIAN,
	JT_4_NASARIAN_EM,
	JT_4_TEDDY_BEAR_W,
	JT_4_TEDDY_BEAR_B,
	JT_4_TEDDY_BEAR_B_L,
	JT_4_M_SOULREAPER,
	JT_4_F_SE_SUN,
	JT_4_M_SE_MOON,
	JT_4_M_SE_STAR,
	JT_4_EP17_KAYA,
	JT_4_EP17_AS,
	JT_4_EP17_ELYUMINA,
	JT_4_EP17_MORNING,
	JT_4_EP17_MIGUEL,
	JT_4_EP17_NIHIL_K,
	JT_4_EP17_MIGUEL_D,
	JT_4_ED_SCHMIDT,
	JT_4_ED_OSCAR,
	JT_4_ED_ORB,
	JT_4_ED_FENCE,
	JT_4_M_ANDREA,
	JT_4_M_ANDREA_D,
	JT_4_F_ANES,
	JT_4_F_ANES_D,
	JT_4_M_SILVANO,
	JT_4_M_SILVANO_D,
	JT_4_F_CECILIA,
	JT_4_F_CECILIA_D,
	JT_4_M_MD_SEYREN,
	JT_4_M_MD_EREMES,
	JT_4_M_MD_HARWORD,
	JT_4_F_MD_MAGALETA,
	JT_4_F_MD_SHECIL,
	JT_4_F_MD_KATRINN,
	JT_4_M_MD_SEYREN_H,
	JT_4_M_MD_EREMES_H,
	JT_4_M_MD_HARWORD_H,
	JT_4_F_MD_MAGALETA_H,
	JT_4_F_MD_SHECIL_H,
	JT_4_F_MD_KATRINN_H,
	JT_4_M_MD_SEYREN_D,
	JT_4_M_MD_EREMES_D,
	JT_4_M_MD_HARWORD_D,
	JT_4_F_MD_MAGALETA_D,
	JT_4_F_MD_SHECIL_D,
	JT_4_F_MD_KATRINN_D,
	JT_4_F_MD_YGNIZEM,
	JT_4_F_ERENE,
	JT_4_M_EINCPTMINER,
	JT_4_F_EINRESERCHER,
	JT_4_F_REINDEER,
	JT_4_PIGOCTO,
	JT_4_ORK_HERO,
	JT_4_JP_16TH,
	JT_4_EP17_MASTER_A,
	JT_4_EP17_BASIC_B,
	JT_4_EP17_GUARD_B,
	JT_4_EP17_BASIC_B_NG,
	JT_4_EP17_GUARD_B_NG,
	JT_4_EP17_SWEETY,
	JT_4_EP17_BOY_A,
	JT_4_EP17_BOY_B,
	JT_4_EP17_TAMARIN,
	JT_4_EP17_SCISSORE,
	JT_4_EP17_TABLET,
	JT_4_EP17_BUCKETS,
	JT_4_EP17_CLEANER,
	JT_4_EP17_BASKET,
	JT_4_EP17_BROKENBETA,
	JT_4_EP17_CLEANER_W,
	JT_4_EP17_MERMAID,
	JT_4_JP_AB_NPC_009,
	JT_4_JP_AB_NPC_010,

	JT_4_4JOB_SILLA = 10364,
	JT_4_4JOB_MAGGI,
	JT_4_4JOB_ROBIN,
	JT_4_4JOB_ROBIN_DRUNK,
	JT_4_4JOB_LETICIA,
	JT_4_4JOB_SERANG,
	JT_4_4JOB_EINHAR,
	JT_4_4JOB_SEALSTONE,
	JT_4_4JOB_PHANTOMBOOK1,
	JT_4_4JOB_PHANTOMBOOK2,
	JT_4_4JOB_PHANTOMBOOK3,
	JT_4_VENDING_MACHINE2,
	JT_4_EP18_MARAM,
	JT_4_EP18_MIRIAM,
	JT_4_EP18_SUAD,
	JT_4_EP18_IMRIL,
	JT_4_EP18_MERCHANT,
	JT_4_EP18_TAMARIN,
	JT_4_EP18_DEW,
	JT_4_EP18_MARK,
	JT_4_EP18_ALF,
	JT_4_EP18_SHULANG,
	JT_4_EP18_BAGOT,
	JT_4_EP18_DEMIFREYA,
	JT_4_EP18_KAMIL,
	JT_4_EP18_HAZAR,
	JT_4_EP18_WAGON,
	JT_4_EP18_PAPERS,
	JT_4_EP18_HALFFLOWER,
	JT_4_EP18_GW_OLD01,
	JT_4_EP18_GW_OLD02,
	JT_4_EP18_GW_MIDDLE01,
	JT_4_EP18_GW_MIDDLE02,
	JT_4_EP18_GW_MAN01,
	JT_4_EP18_GW_MAN02,
	JT_4_EP18_GW_WOMAN01,
	JT_4_EP18_GW_WOMAN02,
	JT_4_EP18_GW_CHILD01,
	JT_4_EP18_GW_CHILD02,
	JT_4_STAR_BOX_SCORE,
	JT_4_STAR_BOX_POW1,
	JT_4_STAR_BOX_POW2,
	JT_4_STAR_BOX_STA1,
	JT_4_STAR_BOX_STA2,
	JT_4_STAR_BOX_SPL1,
	JT_4_STAR_BOX_SPL2,
	JT_4_STAR_BOX_CON1,
	JT_4_STAR_BOX_CON2,
	JT_4_STAR_BOX_WIS1,
	JT_4_STAR_BOX_WIS2,
	JT_4_STAR_BOX_CRT1,
	JT_4_STAR_BOX_CRT2,
	JT_4_4JOB_MAURA,
	JT_4_STAR_BOX_N,
	JT_4_STAR_BOX_H,
	JT_4_STAR_BOX_HP1,
	JT_4_STAR_BOX_HP2,
	JT_4_STAR_BOX_ATK1,
	JT_4_STAR_BOX_ATK2,
	JT_4_STAR_BOX_BARRIER1,
	JT_4_STAR_BOX_BARRIER2,
	JT_4_STAR_BOX_TRAP1,
	JT_4_STAR_BOX_TRAP2,
	JT_4_STAR_BOX_MASTER,
	JT_4_POINT_RED,
	JT_4_POINT_BLUE,
	JT_4_POINT_YELLOW,
	JT_4_POINT_BLACK,
	JT_4_POINT_WHITE,
	JT_4_EXJOB_GERHOLD,
	JT_4_EXJOB_NINJA,
	JT_4_EXJOB_MASTER_J,
	JT_4_EXJOB_MR_SEO,
	JT_4_EXJOB_HAPPY_CLOUD,
	JT_4_EXJOB_STAR,
	JT_4_EXJOB_CHUL_HO,
	JT_4_EXJOB_KI_SUL,
	JT_4_EXJOB_HYUN_ROK,
	JT_1_JOURNEY_STONE_D,
	JT_1_JOURNEY_STONE_F,
	JT_ROZ_MQ_SIGRUN,
	JT_ROZ_MQ_SIGRUN_S,
	JT_ROZ_MQ_HARACE01,
	JT_ROZ_MQ_HARACE02,
	JT_ROZ_MQ_SAHARIO,
	JT_ROZ_MQ_SUPIGEL,
	JT_ROZ_MQ_DEADSOLDIER,
	JT_4_EP19_ZORYARA,
	JT_4_EP19_MORYARA,
	JT_4_EP19_LUNCH,
	JT_4_EP19_LAZY,
	JT_4_EP19_JUNCEA,
	JT_4_EP19_JUNCEA_M,
	JT_4_EP19_JUNCEA_D,
	JT_4_EP19_FRIEDERIKE,
	JT_4_EP19_SUITCASE,
	JT_4_EP19_HEALROCK,
	JT_4_EP19_IWIN,
	JT_4_EP19_IWIN_DIVER,
	JT_4_EP19_TAMARIN,
	JT_4_EP19_LEON,
	JT_4_EP19_AURELIE,
	JT_4_EP19_LASGAND,
	JT_4_EP19_VOGLINDE,
	JT_4_EP19_VELLGUNDE,
	JT_4_EP19_LEHAR,
	JT_4_EP19_RGAN_R1,
	JT_4_EP19_RGAN_R2,
	JT_4_EP19_RGAN_R3,
	JT_4_EP19_RGAN_SR1,
	JT_4_EP19_RGAN_SR2,
	JT_4_EP19_RGAN_SR3,
	JT_1_RAGFES_01,
	JT_1_RAGFES_01_M,
	JT_4_RAGFES_02,
	JT_4_RAGFES_02_M,
	JT_4_RAGFES_03,
	JT_4_RAGFES_03_M,
	JT_4_RAGFES_04,
	JT_4_RAGFES_04_M,
	JT_4_RAGFES_05,
	JT_4_RAGFES_05_M,
	JT_4_RAGFES_06,
	JT_4_RAGFES_06_M,
	JT_4_RAGFES_07,
	JT_4_RAGFES_07_M,
	JT_4_RAGFES_08,
	JT_4_RAGFES_08_M,
	JT_4_RAGFES_09,
	JT_4_RAGFES_09_M,
	JT_4_RAGFES_10,
	JT_4_RAGFES_10_M,
	JT_4_RAGFES_11,
	JT_4_RAGFES_11_M,
	JT_4_RAGFES_12,
	JT_4_RAGFES_12_M,
	JT_4_RAGFES_13,
	JT_4_RAGFES_13_M,
	JT_4_RAGFES_14,
	JT_4_RAGFES_14_M,
	JT_4_RAGFES_15,
	JT_4_RAGFES_15_M,
	JT_4_RAGFES_16,
	JT_4_RAGFES_16_M,
	JT_4_EXJOB_NINJA2,
	JT_4_VR_BOOK_FAIRY,
	JT_ROZ_MQ_LUCIAN,
	JT_ROZ_MQ_BRITIA,
	JT_ROZ_MQ_ASSASIN01,
	JT_STRANGE_B_SMITH1,
	JT_STRONGER_B_SMTIH,
	JT_4_VR_BOOK_RED,
	JT_4_VR_BOOK_BLUE,
	JT_4_VR_BOOK_YELLOW,
	JT_4_VR_BOOK_GREEN,
	JT_4_VR_BOOK_WHITE,
	JT_4_VR_YGNIZEM,

	JT_4_JP_19TH = 10524,
	JT_4_KING_PORING,
	JT_4_VR_SWORDMAN_DEAD,
	JT_GATE_SKYBLUE,
	JT_4_CS_RIGEL,
	JT_4_M_NILLEM,
	JT_4_LARVA_RED,
	JT_4_LARVA_YELLOW,
	JT_4_LARVA_BLACK,
	JT_4_LARVA_VIOLET,
	JT_4_HERO_SAUSAGE,
	JT_4_PRINCESS_SAUSAGE,

	JT_4_EP20_LASGAND = 10536,
	JT_4_EP20_NYAR,
	JT_4_EP20_DEVICE_BLUE,
	JT_4_EP20_DEVICE_RED,
	JT_4_EP20_DEVICE_BLACK,

	JT_4_GACHA_MACHINE = 10545,
	JT_4_VR_CHAO,
	JT_4_RUNESTONE,
	JT_4_EM_ARDOR,
	JT_4_EM_DILUVIO,
	JT_4_EM_PROCELLA,
	JT_4_EM_TERREMOTUS,
	JT_4_EM_SERPENS,
	JT_4_SNOWDOG,
	JT_1_SHADOW_RED,
	JT_1_SHADOW_ORANGE,
	JT_1_SHADOW_YELLOW,
	JT_1_SHADOW_GREEN,
	JT_1_SHADOW_BLUE,
	JT_1_SHADOW_INDIGO,
	JT_1_SHADOW_VIOLET,
	JT_4_EVT_LAMMIR,
	JT_4_EVT_SULKI,
	JT_4_EVT_KKAT,

	JT_ROZ_MQ_XAVIER = 13000,
	JT_ROZ_MQ_MOCLORD,
	JT_ROZ_MQ_SKULD,

#ifndef Pandas_Update_NPC_Identity_Information
	JT_NEW_NPC_3RD_END = 19999,
	NPC_RANGE3_END, // Official: JT_NEW_NPC_3RD_END=19999
#else
	JT_EVT_BAPHOMET = 20061,
	JT_EVT_BAPHO_JR = 20062,
	JT_EVT_V_WOLF = 20063,
	JT_EVT_ECLIPSE = 20064,
	JT_EVT_VOCAL = 20065,
	JT_EVT_UNGOLIANT = 20066,
	JT_EVT_GEOGRAPHER = 20067,
	JT_EVT_MANTIS = 20068,
	JT_EVT_GRIZZLY = 20069,
	JT_EVT_KINDOFBEETLE = 20070,
	JT_EVT_BIGFOOT = 20071,
	JT_EVT_COCO = 20072,
	JT_E_SIROMA = 20073,
	JT_E_MYSTCASE = 20074,
	JT_E_X_PORING = 20075,
	JT_MD_MANHOLE = 20112,
	JT_GOBLIN_KING = 20118,
	JT_BAD_CATCUMBER = 20119,
	JT_JP_E_MONSTER_143 = 20157,
	JT_JP_E_MONSTER_144 = 20158,
	JT_JP_E_MONSTER_145 = 20159,
	JT_JP_E_MONSTER_146 = 20160,
	JT_JP_E_MONSTER_149 = 20163,
	JT_JP_E_MONSTER_150 = 20164,
	JT_EXTRA_JOKER = 20175,
	JT_ERZSEBET = 20176,
	JT_JENIFFER = 20177,
	JT_GENERAL_ORC = 20178,
	JT_SIEGLOUSE = 20179,
	JT_VH_AMON_RA = 20181,
	JT_VH_BAPHOMET = 20182,
	JT_VH_DARK_LORD = 20183,
	JT_VH_DOPPELGANGER = 20184,
	JT_VH_DRACULA = 20185,
	JT_VH_DRAKE = 20186,
	JT_VH_EDDGA = 20187,
	JT_VH_GARM = 20188,
	JT_VH_GOLDEN_BUG = 20189,
	JT_VH_KNIGHT_OF_WS = 20190,
	JT_VH_MAYA = 20191,
	JT_VH_MISTRESS = 20192,
	JT_VH_MOONLIGHT = 20193,
	JT_VH_ORC_LORD = 20194,
	JT_VH_ORK_HERO = 20195,
	JT_VH_OSIRIS = 20196,
	JT_VH_PHARAOH = 20197,
	JT_VH_PHREEONI = 20198,
	JT_VH_TAO_GUNKA = 20199,
	JT_VH_TURTLE_GENERAL = 20200,
	JT_VH_B_SEYREN = 20201,
	JT_VH_B_HARWORD = 20202,
	JT_VH_B_EREMES = 20203,
	JT_VH_B_KATRINN = 20204,
	JT_VH_B_MAGALETA = 20205,
	JT_VH_LORD_OF_DEATH = 20206,
	JT_VH_ENTWEIHEN = 20207,
	JT_VH_NAGHT_SIEGER = 20208,
	JT_VH_DETALE = 20209,
	JT_VH_THANATOS = 20210,
	JT_VH_APOCALIPS_H = 20211,
	JT_VH_KIEL_ = 20212,
	JT_VH_RANDGRIS = 20213,
	JT_VH_RSX_0806 = 20214,
	JT_VH_B_YGNIZEM = 20215,
	JT_VH_ATROCE = 20216,
	JT_VH_BEELZEBUB_ = 20217,
	JT_VH_FALLINGBISHOP = 20218,
	JT_VH_GLOOM_U_N = 20219,
	JT_VH_IFRIT = 20220,
	JT_VH_KTULLANUX = 20221,
	JT_VH_H_HUNTER_EV = 20222,
	JT_VH_MM_CUTIE = 20223,
	JT_VH_VENOM_KIMERA = 20224,
	JT_VH_B_SHECIL = 20225,
	JT_VH_B_RANDEL = 20226,
	JT_VH_B_FLAMEL = 20227,
	JT_VH_B_TRENTINI = 20228,
	JT_VH_CHARLESTON3 = 20229,
	JT_VH_GRAND_PERE = 20230,
	JT_VH_S_NYDHOG = 20231,
	JT_VH_QUEEN_SCARABA = 20232,
	JT_VH_KRAKEN = 20233,
	JT_VH_TIMEHOLDER = 20234,
	JT_VH_INCAN_SAMURAI = 20235,
	JT_VH_BACSOJIN = 20236,
	JT_VH_DARK_S_LORD = 20237,
	JT_VH_LADY_TANEE = 20238,
	JT_VH_GOPINICH = 20239,
	JT_VH_LEAK = 20240,
	JT_VH_MECHASPIDER = 20241,
	JT_VH_PYURIEL = 20242,
	JT_VH_KADES = 20243,
	JT_VH_GIOIA = 20244,
	JT_VH_DAEHYON = 20245,
	JT_VH_B_CELIA = 20246,
	JT_VH_B_CHEN = 20247,
	JT_VH_B_ALPHOCCIO = 20248,
	JT_VH_B_GERTIE = 20249,
	JT_VH_ENTWEIHEN_R = 20250,
	JT_VH_ENTWEIHEN_H = 20251,
	JT_VH_ENTWEIHEN_M = 20252,
	JT_VH_ENTWEIHEN_S = 20253,
	JT_VH_MIMIC = 20254,
	JT_ILL_TEDDY_BEAR_R = 20255,
	JT_ILL_TEDDY_BEAR_Y = 20256,
	JT_ILL_TEDDY_BEAR_G = 20257,
	JT_ILL_TEDDY_BEAR_W = 20258,
	JT_ILL_TEDDY_BEAR_B = 20259,
	JT_ILL_TEDDY_BEAR_S = 20260,
	JT_ILL_PITMAN = 20261,
	JT_ILL_MINERAL = 20262,
	JT_ILL_OBSIDIAN = 20263,
	JT_G_ILL_TEDDY_BEAR_R = 20264,
	JT_G_ILL_TEDDY_BEAR_Y = 20265,
	JT_G_ILL_TEDDY_BEAR_G = 20266,
	JT_G_ILL_TEDDY_BEAR_W = 20267,
	JT_G_ILL_TEDDY_BEAR_B = 20268,
	JT_GUILD_SKILL_FLAG = 20269,
	JT_ILL_TRI_JOINT = 20270,
	JT_ILL_STALACTIC_GOLEM = 20271,
	JT_ILL_MEGALITH = 20272,
	JT_ILL_TAO_GUNKA = 20273,
	JT_ILL_STONE_SHOOTER = 20274,
	JT_ILL_WOOTAN_SHOOTER = 20275,
	JT_ILL_WOOTAN_FIGHTER = 20276,
	JT_ILL_WOOTAN_DEFENDER = 20277,
	JT_G_ILL_MEGALITH = 20278,
	JT_G_ILL_WOOTAN_SHOOTER = 20279,
	JT_G_ILL_WOOTAN_FIGHTER = 20280,
	JT_E_DANDY_STAR = 20281,
	JT_E_PECOPECO = 20332,
	JT_MD_EL_A17T = 20340,
	JT_MD_E_EA1L = 20341,
	JT_MD_E_EA2S = 20342,
	JT_MD_E_13EN0 = 20343,
	JT_MD_VENOM_BUG = 20344,
	JT_MD_CONSTANT = 20345,
	JT_MD_MIGUEL = 20346,
	JT_MD_MIGUEL_G = 20347,
	JT_MD_A013_CAPUT = 20348,
	JT_MD_A013_DOLOR = 20349,
	JT_MD_A013_BELLARE = 20350,
	JT_MD_MANHOLE2 = 20351,
	JT_MD_POMPOM = 20352,
	JT_MD_CROB = 20353,
	JT_E_FINE_DUST = 20354,
	JT_EP17_1_BELLARE1 = 20355,
	JT_EP17_1_BELLARE2 = 20356,
	JT_EP17_1_SANARE1 = 20357,
	JT_EP17_1_SANARE2 = 20358,
	JT_EP17_1_PLAGA1 = 20359,
	JT_EP17_1_PLAGA2 = 20360,
	JT_EP17_1_DOLOR1 = 20361,
	JT_EP17_1_DOLOR2 = 20362,
	JT_EP17_1_VENENUM1 = 20363,
	JT_EP17_1_VENENUM2 = 20364,
	JT_EP17_1_TWIN_CAPUT1 = 20365,
	JT_EP17_1_TWIN_CAPUT2 = 20366,
	JT_RAYDRIC_H = 20367,
	JT_RAYDRIC_ARCHER_H = 20368,
	JT_GARGOYLE_H = 20369,
	JT_STING_H = 20370,
	JT_RAGGED_ZOMBIE_H = 20371,
	JT_BLAZZER_H = 20372,
	JT_NIGHTMARE_TERROR_H = 20373,
	JT_DELETER1_H = 20374,
	JT_DELETER2_H = 20375,
	JT_EXPLOSION_H = 20376,
	JT_KAHO_H = 20377,
	JT_LAVA_GOLEM_H = 20378,
	JT_ICE_GHOST_H = 20379,
	JT_FLAME_GHOST_H = 20380,
	JT_EP17_1_R4885_BESTIA = 20381,
	JT_G_TWIN_CAPUT2 = 20382,
	JT_MD_GH_KING_SCHMIDT = 20385,
	JT_MD_GH_KING_SCHMIDT_N = 20386,
	JT_MD_GH_KING_SCHMIDT_H = 20387,
	JT_MD_GH_KHALITZBURG = 20388,
	JT_MD_GH_KHALITZBURG_H = 20389,
	JT_MD_GH_WHITEKNIGHT = 20390,
	JT_MD_GH_WHITEKNIGHT_H = 20391,
	JT_MD_GH_ALICE_G = 20392,
	JT_MD_GH_ROOT_G = 20393,
	JT_MD_GH_BLOODY_KNIGHT = 20394,
	JT_MUSPELLSKOLL_H = 20419,
	JT_WANDER_MAN_H = 20420,
	JT_BRINARANEA_H = 20421,
	JT_DARK_LORD_H = 20422,
	JT_BACSOJIN2 = 20423,
	JT_MOONLIGHT2 = 20424,
	JT_PHREEONI2 = 20425,
	JT_MD_MANHOLE3 = 20426,
	JT_G_BONE_FERUS = 20516,
	JT_G_BONE_ACIDUS = 20517,
	JT_E_MD_LUDE = 20518,
	JT_E_MD_JACK_GAINT = 20519,
	JT_ILL_BAPHOMET = 20520,
	JT_ILL_ANDREA = 20521,
	JT_ILL_ANES = 20522,
	JT_ILL_SILVANO = 20523,
	JT_ILL_CECILIA = 20524,
	JT_ILL_BAPHOMET_J = 20525,
	JT_ILL_SIDE_WINDER = 20526,
	JT_ILL_HUNTER_FLY = 20527,
	JT_ILL_MANTIS = 20528,
	JT_ILL_GHOSTRING = 20529,
	JT_ILL_KILLER_MANTIS = 20530,
	JT_ILL_POPORING = 20531,
	JT_ILL_STEM_WORM = 20532,
	JT_G_ILL_BAPHOMET_J = 20533,
	JT_G_REGINLEIF = 20534,
	JT_G_INGRID = 20535,
	JT_MD_ED_B_YGNIZEM = 20536,
	JT_MD_ED_YGNIZEM = 20537,
	JT_MD_ED_EREND = 20538,
	JT_MD_ED_ARMAIA = 20539,
	JT_MD_ED_EREMES = 20540,
	JT_MD_ED_LGTHIGHGUARD = 20541,
	JT_MD_ED_LGTGUARD = 20542,
	JT_MD_ED_M_SCIENCE = 20543,
	JT_G_MINERAL_R = 20558,
	JT_G_MINERAL_P = 20559,
	JT_G_MINERAL_G = 20560,
	JT_G_MINERAL_W = 20561,
	JT_HIDDEN_MOB8 = 20562,
	JT_MISSING_OCTOPIG = 20569,
	JT_SAECOM = 20570,
	JT_ORK_HERO2 = 20571,
	JT_MD_C_HEMEL = 20572,
	JT_MD_C_AMDARAIS = 20573,
	JT_MD_C_WHITEKNIGHT = 20574,
	JT_MD_C_CORRUPTION_ROOT = 20575,
	JT_MD_C_KHALITZBURG = 20576,
	JT_MD_C_RAYDRIC = 20577,
	JT_MD_C_RAYDRIC_ARCHER = 20578,
	JT_MD_C_ZOMBIE = 20579,
	JT_MD_C_GHOUL = 20580,
	JT_MD_C_THORN = 20581,
	JT_MD_MANHOLE4 = 20582,
	JT_MD_C_WHITEKNIGHT_G = 20583,
	JT_MD_C_KHALITZBURG_G = 20584,
	JT_MD_C_RAY_ARCHER_G = 20585,
	JT_SWING_TALE = 20589,
	JT_PAPARE = 20591,
	JT_POISONOUS = 20592,
	JT_TOXIOUS = 20593,
	JT_MINERAL_G = 20594,
	JT_MINERAL_R = 20595,
	JT_MINERAL_W = 20596,
	JT_MINERAL_P = 20597,
	JT_JEWELIANT = 20598,
	JT_G_JEWELIANT = 20599,
	JT_JEWEL = 20600,
	JT_JUNGOLIANT = 20601,
	JT_PORCELLIO_W = 20602,
	JT_ABYSSMAN = 20603,
	JT_ANGELGOLT = 20604,
	JT_ANGELGOLT2 = 20605,
	JT_HOLY_FRUS = 20606,
	JT_HOLY_SKOGUL = 20607,
	JT_PLASMA_ARCH = 20608,
	JT_PLASMA_SPT = 20609,
	JT_REGINLEIF = 20610,
	JT_INGRID = 20611,
	JT_FERUS_P = 20612,
	JT_TREASURE_MIMIC = 20613,
	JT_ACIDUS_B = 20614,
	JT_ACIDUS_S = 20615,
	JT_BONE_FERUS = 20616,
	JT_BONE_ACIDUS = 20617,
	JT_BONE_DETALE = 20618,
	JT_GLOOMUNDERNIGHT2 = 20619,
	JT_MD_REDPEPPER = 20620,
	JT_MD_REDPEPPER_H = 20621,
	JT_MD_ASSISTANT = 20622,
	JT_MD_ASSISTANT_H = 20623,
	JT_MD_DRY_RAFFLESIA = 20624,
	JT_MD_DRY_RAFFLESIA_H = 20625,
	JT_MD_ALNOLDI_EX = 20626,
	JT_MD_ALNOLDI_EX_H = 20627,
	JT_EP17_2_ALPHA_MASTER = 20628,
	JT_EP17_2_BETA_BASIC = 20629,
	JT_EP17_2_BETA_BASIC_NG = 20630,
	JT_MD_BETA_SCISSORE_NG = 20631,
	JT_MD_BETA_SCISSORE_NG_H = 20632,
	JT_EP17_2_BETA_CLEANER_A = 20633,
	JT_EP17_2_BETA_CLEANER_B = 20634,
	JT_EP17_2_BETA_BATHS_A = 20635,
	JT_EP17_2_BETA_BATHS_B = 20636,
	JT_EP17_2_BETA_ITEMKEEPER = 20637,
	JT_EP17_2_BETA_GUARDS = 20638,
	JT_EP17_2_BETA_GUARDS_NG = 20639,
	JT_EP17_2_OMEGA_CLEANER = 20640,
	JT_EP17_2_OMEGA_CLEANER_NG = 20641,
	JT_MD_SWEETY = 20642,
	JT_EP17_2_PHEN = 20643,
	JT_EP17_2_MARC = 20644,
	JT_EP17_2_SWORD_FISH = 20645,
	JT_EP17_2_PIRANHA = 20646,
	JT_EP17_2_BATH_MERMAID = 20647,
	JT_EP17_2_PITAYA_BOSS = 20648,
	JT_EP17_2_PITAYA_R = 20649,
	JT_EP17_2_PITAYA_Y = 20650,
	JT_EP17_2_PITAYA_B = 20651,
	JT_EP17_2_PITAYA_V = 20652,
	JT_EP17_2_PITAYA_G = 20653,
	JT_G_PITAYA_R = 20654,
	JT_G_PITAYA_Y = 20655,
	JT_G_PITAYA_B = 20656,
	JT_G_PITAYA_V = 20657,
	JT_G_PITAYA_G = 20658,
	JT_MD_PITAYA_BOSS = 20659,
	JT_MD_PITAYA_R = 20660,
	JT_MD_PITAYA_Y = 20661,
	JT_MD_PITAYA_B = 20662,
	JT_MD_PITAYA_V = 20663,
	JT_MD_PITAYA_G = 20664,
	JT_MD_VERPORTA = 20665,
	JT_MD_VERPORTE_H = 20666,
	JT_MD_SILVA_PAPILIA = 20667,
	JT_MD_GRAN_PAPILIA = 20668,
	JT_MD_PAPILA = 20669,
	JT_MD_PAPILA_H = 20670,
	JT_MD_PAPILA_RUBA = 20671,
	JT_MD_PAPILA_RUBA_H = 20672,
	JT_MD_PAPILA_RUBA2 = 20673,
	JT_MD_PAPILA_CAE = 20674,
	JT_MD_PAPILA_CAE_H = 20675,
	JT_MD_PAPILA_CAE2 = 20676,
	JT_MD_ARIES = 20677,
	JT_MD_ARIES_H = 20678,
	JT_EP17_2_GUARDIAN_PARTS = 20679,
	JT_EP17_2_HEART_HUNTER = 20680,
	JT_G_EP17_2_HEART_HUNTER = 20681,
	JT_EP17_2_HEART_HUNTER_H = 20682,
	JT_EP17_2_BOOKWORM = 20683,
	JT_EP17_2_ROAMING_SPLBOOK = 20684,
	JT_EP17_2_VENENUM3 = 20685,
	JT_EP17_2_CRAMP = 20686,
	JT_EP17_2_WATERFALL = 20687,
	JT_EP17_2_BELLARE3 = 20688,
	JT_EP17_2_DOLOR3 = 20689,
	JT_EP17_2_PLASMA_Y = 20690,
	JT_EP17_2_PLAGA3 = 20691,
	JT_EP17_2_SANARE3 = 20692,
	JT_EP17_2_PLASMA_R = 20693,
	JT_EP17_2_PLASMA_R2 = 20694,
	JT_E_GARLING = 20695,
	JT_EP17_2_CHILD_ADMIN1 = 20696,
	JT_EP17_2_CHILD_ADMIN2 = 20697,
	JT_G_ASSISTANT = 20698,
	JT_G_BELLARE3 = 20699,
	JT_G_BETA_SCISSORE_NG = 20700,
	JT_EMPATHIZER = 20773,
	JT_HAPPY_GIVER = 20774,
	JT_THA_ANGER = 20775,
	JT_THA_HORROR = 20776,
	JT_THA_RESENT = 20777,
	JT_THA_REGRET = 20778,
	JT_VOID_MIMIC = 20779,
	JT_BOOK_OF_DEATH = 20780,
	JT_ELDEST = 20781,
	JT_CROW_DUKE = 20782,
	JT_CROW_BARON = 20783,
	JT_MD_THANATOS = 20784,
	JT_MD_BROKEN_THANATOS = 20785,
	JT_MD_THA_BUFF = 20786,
	JT_MD_EMPATHIZER = 20787,
	JT_MD_HAPPY_GIVER = 20788,
	JT_MD_RETRIBUTION = 20789,
	JT_MD_SHELTER = 20790,
	JT_MD_SOLACE = 20791,
	JT_MD_THA_ANGER = 20792,
	JT_MD_THA_HORROR = 20793,
	JT_MD_THA_RESENT = 20794,
	JT_MD_THA_REGRET = 20795,
	JT_MD_THA_ODIUM = 20796,
	JT_MD_THA_DESPERO = 20797,
	JT_MD_THA_MAERO = 20798,
	JT_MD_THA_DOLOR = 20799,
	JT_MD_OBSERVATION = 20800,
	JT_ILL_SROPHO = 20801,
	JT_ILL_OBEAUNE = 20802,
	JT_ILL_DEVIACE = 20803,
	JT_ILL_MARSE = 20804,
	JT_ILL_MERMAN = 20805,
	JT_ILL_SEDORA = 20806,
	JT_ILL_SWORD_FISH = 20807,
	JT_ILL_STROUF = 20808,
	JT_ILL_PHEN = 20809,
	JT_ILL_KING_DRAMOH = 20810,
	JT_ILL_KRAKEN = 20811,
	JT_MD_EVENT_HEMEL = 20812,
	JT_MD_EVENT_AMDARAIS = 20813,
	JT_EM_DILUVIO = 20816,
	JT_EM_ARDOR = 20817,
	JT_EM_PROCELLA = 20818,
	JT_EM_TERREMOTUS = 20819,
	JT_EM_SERPENS = 20820,
	JT_4JOB_VOID = 20821,
	JT_4JOB_WRAITH = 20822,
	JT_4JOB_KINGS_NIGHT = 20823,
	JT_4JOB_AGONY_NIGHT = 20824,
	JT_4JOB_DEVOTION_NIGHT = 20825,
	JT_4JOB_ARMED_NIGHT = 20826,
	JT_4JOB_DOOMK = 20827,
	JT_4JOB_VERKHASEL = 20828,
	JT_4JOB_BAPHOMET = 20829,
	JT_4JOB_H_FALCON = 20830,
	JT_4JOB_S_FALCON = 20831,
	JT_4JOB_R_FALCON = 20832,
	JT_4JOB_WORG = 20833,
	JT_ABR_BATTLE_WARIOR = 20834,
	JT_ABR_DUAL_CANNON = 20835,
	JT_ABR_MOTHER_NET = 20836,
	JT_ABR_INFINITY = 20837,
	JT_ILL_ABYSMAL_WITCH = 20843,
	JT_PRAY_GIVER = 20844,
	JT_SMILE_GIVER = 20845,
	JT_MD_HIDDEN_GROUND01 = 20846,
	JT_MD_HIDDEN_GROUND02 = 20847,
	JT_SUMMON_WOODENWARRIOR = 20848,
	JT_SUMMON_WOODEN_FAIRY = 20849,
	JT_SUMMON_CREEPER = 20850,
	JT_SUMMON_HELLTREE = 20851,
	JT_MD_N_ARENA_1 = 20856,
	JT_MD_N_ARENA_2 = 20857,
	JT_MD_N_ARENA_3_1 = 20858,
	JT_MD_N_ARENA_3_2 = 20859,
	JT_MD_N_ARENA_3_3 = 20860,
	JT_MD_N_ARENA_4 = 20861,
	JT_MD_N_ARENA_5 = 20862,
	JT_MD_N_ARENA_6 = 20863,
	JT_MD_N_ARENA_7 = 20864,
	JT_MD_N_ARENA_8 = 20865,
	JT_MD_N_ARENA_9 = 20866,
	JT_MD_N_ARENA_10 = 20867,
	JT_MD_N_ARENA_11 = 20868,
	JT_MD_N_ARENA_12 = 20869,
	JT_MD_KANABIAN_N = 20870,
	JT_MD_ALPHONSE_N = 20871,
	JT_MD_GEFFEN_FENRIR_N = 20872,
	JT_WAR_NUT = 20873,
	JT_4JOB_LETICIA = 20875,
	JT_4JOB_ACIDUS = 20876,
	JT_G_ILL_SROPHO = 20877,
	JT_G_ILL_OBEAUNE = 20878,
	JT_G_ILL_DEVIACE = 20879,
	JT_G_ILL_MARSE = 20880,
	JT_G_ILL_MERMAN = 20881,
	JT_G_ILL_SEDORA = 20882,
	JT_G_ILL_SWORD_FISH = 20883,
	JT_G_ILL_STROUF = 20884,
	JT_G_ILL_PHEN = 20885,
	JT_MD_Airboat_Tree = 20886,
	JT_MD_Airboat_Poring = 20887,
	JT_MD_Airboat_Worm = 20888,
	JT_MD_Airboat_LEECH = 20889,
	JT_MD_Airboat_Mos = 20890,
	JT_MD_Airboat_Boss = 20891,
	JT_MD_SAKRAY = 20892,
	JT_MD_TIARA = 20893,
	JT_MD_UNDEAD_KNIGHT = 20894,
	JT_MD_UNDEAD_SOLDIER = 20895,
	JT_MD_UNDEAD_ARCHER = 20896,
	JT_MD_UNDEAD_WIZARD = 20897,
	JT_MD_UNDEAD_MAGICIAN = 20898,
	JT_MD_UNDEAD_NOBLE = 20899,
	JT_MD_UNDEAD_SERVANT = 20900,
	JT_CHIMERA_LAVA = 20920,
	JT_CHIMERA_FULGOR = 20921,
	JT_CHIMERA_NAPEO = 20922,
	JT_CHIMERA_GALENSIS = 20923,
	JT_CHIMERA_AMITERA = 20924,
	JT_CHIMERA_LITUS = 20925,
	JT_CHIMERA_FILLIA = 20926,
	JT_CHIMERA_VANILAQUS = 20927,
	JT_CHIMERA_THEONE = 20928,
	JT_GIANT_CAPUT = 20929,
	JT_DOLORIAN = 20930,
	JT_PLAGARION = 20931,
	JT_DEADRE = 20932,
	JT_VENEDI = 20933,
	JT_R001_BESTIA = 20934,
	JT_GAN_CEANN = 20935,
	JT_DISGUISER = 20936,
	JT_BRUTAL_MURDERER = 20937,
	JT_GHOST_CUBE = 20938,
	JT_LUDE_GAL = 20939,
	JT_BLUEMOON_LOLI_RURI = 20940,
	JT_GROTE = 20941,
	JT_PIERROTZOIST = 20942,
	JT_DEATH_WITCH = 20943,
	JT_MD_BETELGEUSE = 20994,
	JT_MD_G_DEADSOUL = 20995,
	JT_MD_NAGHT_SIEGER = 20996,
	JT_MD_G_ENTWEIHEN_M = 20997,
	JT_MD_T_JAKK = 20998,
	JT_MD_T_STONE_SHOOTER = 20999,
	JT_MD_T_GRIZZLY = 21000,
	JT_MD_T_STALACTIC_GOLEM = 21001,
	JT_MD_T_CHIMERA = 21002,
	JT_MD_T_KARAKASA = 21003,
	JT_MD_T_RIDEWORD = 21004,
	JT_MD_T_PARASITE = 21005,
	JT_MD_T_WRAITH = 21006,
	JT_MD_T_PETIT_ = 21007,
	JT_MD_T_WIND_GHOST = 21008,
	JT_MD_T_CLOCK = 21009,
	JT_MD_T_RAYDRIC_ARCHER = 21010,
	JT_MD_T_INCREASE_SOIL = 21011,
	JT_MD_T_PENOMENA = 21012,
	JT_MD_T_PETIT = 21013,
	JT_MD_T_ALARM = 21014,
	JT_MD_T_ZOMBIE_PRISONER = 21015,
	JT_MD_T_MARIONETTE = 21016,
	JT_MD_T_PERMETER = 21017,
	JT_MD_T_SKEL_PRISONER = 21018,
	JT_MD_T_OWL_DUKE = 21019,
	JT_MD_T_DEVIRUCHI = 21020,
	JT_MD_T_BLOOD_BUTTERFLY = 21021,
	JT_MD_T_STAPO = 21022,
	JT_MD_T_EVIL_CLOUD_HERMIT = 21023,
	JT_MD_T_THE_PAPER = 21024,
	JT_MD_T_TENGU = 21025,
	JT_MD_T_ALICE = 21026,
	JT_MD_T_ANACONDAQ = 21027,
	JT_MD_T_GARGOYLE = 21028,
	JT_MD_T_CARAT = 21029,
	JT_MD_T_STING = 21030,
	JT_MD_T_GRYPHON = 21031,
	JT_MD_T_GIBBET = 21032,
	JT_MD_T_NIGHTMARE_TERROR = 21033,
	JT_MD_T_ANOLIAN = 21034,
	JT_MD_T_BLOODY_MURDERER = 21035,
	JT_MD_T_ALIOT = 21036,
	JT_MD_T_VENATU = 21037,
	JT_MD_T_DEATHWORD = 21038,
	JT_MD_T_PLASMA_B = 21039,
	JT_MD_T_DIMIK = 21040,
	JT_MD_T_MINI_DEMON = 21041,
	JT_MD_T_LEIB_OLMAI = 21042,
	JT_MD_T_WANDER_MAN = 21043,
	JT_MD_T_RETRIBUTION = 21044,
	JT_MD_T_FLAME_SKULL = 21045,
	JT_MD_T_KNIGHT_OF_ABYSS = 21046,
	JT_MD_T_BANSHEE = 21047,
	JT_G_CHIMERA_LAVA = 21048,
	JT_G_CHIMERA_FULGOR = 21049,
	JT_G_CHIMERA_NAPEO = 21050,
	JT_G_CHIMERA_GALENSIS = 21051,
	JT_G_DISGUISER = 21052,
	JT_G_BLUEMOON_LOLI_RURI = 21053,
	JT_G_GROTE = 21054,
	JT_G_PIERROTZOIST = 21055,
	JT_G_GIANT_CAPUT = 21056,
	JT_G_DOLORIAN = 21057,
	JT_G_PLAGARION = 21058,
	JT_G_DEADRE = 21059,
	JT_G_VENEDI = 21060,
	JT_MD_Airboat_Boss2 = 21061,
	JT_MD_Airboat_Boss3 = 21062,
	JT_MD_Airboat_Boss4 = 21063,
	JT_S_DUMMY_100_SMALL = 21064,
	JT_S_DUMMY_100_MEDIUM = 21065,
	JT_S_DUMMY_100_LARGE = 21066,
	JT_S_DUMMY_100_NOTHING = 21067,
	JT_S_DUMMY_100_DRAGON = 21068,
	JT_S_DUMMY_100_ANIMAL = 21069,
	JT_S_DUMMY_100_HUMAN = 21070,
	JT_S_DUMMY_100_INSECT = 21071,
	JT_S_DUMMY_100_FISH = 21072,
	JT_S_DUMMY_100_DEMON = 21073,
	JT_S_DUMMY_100_PLANT = 21074,
	JT_S_DUMMY_100_ANGEL = 21075,
	JT_S_DUMMY_100_UNDEAD = 21076,
	JT_S_DUMMY_100_NOTHING2 = 21077,
	JT_S_DUMMY_100_WATER = 21078,
	JT_S_DUMMY_100_GROUND = 21079,
	JT_S_DUMMY_100_FIRE = 21080,
	JT_S_DUMMY_100_WIND = 21081,
	JT_S_DUMMY_100_POISON = 21082,
	JT_S_DUMMY_100_SAINT = 21083,
	JT_S_DUMMY_100_DARKNESS = 21084,
	JT_S_DUMMY_100_TELEKINESIS = 21085,
	JT_S_DUMMY_100_UNDEAD2 = 21086,
	JT_WANDERING_DUCK = 21089,
	JT_KIEL_D_01_2 = 21290,
	JT_EP18_ARMED_VILLAGER01 = 21292,
	JT_EP18_ARMED_VILLAGER02 = 21293,
	JT_EP18_ARMED_VILLAGER03 = 21294,
	JT_EP18_ASH_TOAD = 21295,
	JT_EP18_RAKEHAND = 21296,
	JT_EP18_SPARK = 21297,
	JT_EP18_HOT_MOLAR = 21298,
	JT_EP18_VOLCARING = 21299,
	JT_EP18_LAVA_TOAD = 21300,
	JT_EP18_BURNING_FANG = 21301,
	JT_EP18_ASHHOPPER = 21302,
	JT_EP18_ASHRING = 21303,
	JT_EP18_GREY_WOLF = 21304,
	JT_EP18_TUMBLE_RING = 21305,
	JT_EP18_FIREWIND_KITE = 21306,
	JT_EP18_PHANTOM_WOLF = 21307,
	JT_EP18_MD_HEARTHUNTER_A = 21308,
	JT_EP18_MD_THOR_GUARD = 21309,
	JT_EP18_MD_GUARD_A = 21310,
	JT_EP18_MD_GUARD_B = 21311,
	JT_EP18_MD_HEARTHUNTER_R = 21312,
	JT_EP18_MD_HEARTHUNTER_F = 21313,
	JT_EP18_MD_SCHULANG = 21314,
	JT_EP18_MD_DEMI_FREYJA = 21315,
	JT_EP18_MD_SCHULANG_R = 21316,
	JT_EP18_MD_DEMI_FREYJA_R = 21317,
	JT_EP18_MD_SANARE_R = 21318,
	JT_EP18_MD_HEARTHUNTER_R2 = 21319,
	JT_EP18_NPC_MARAM = 21320,
	JT_EP18_NPC_MIRIAM = 21321,
	JT_EP18_NPC_SUAD = 21322,
	JT_EP18_GREY_GOAT = 21323,
	JT_EP18_GREY_WOLF_BABY = 21324,
	JT_MD_T_MASTERING = 21325,
	JT_MD_T_VAGABOND_WOLF = 21326,
	JT_MD_T_VOCAL = 21327,
	JT_MD_T_GOLDEN_BUG = 21328,
	JT_MD_T_MISTRESS = 21329,
	JT_MD_T_MAYA = 21330,
	JT_MD_T_PHREEONI = 21331,
	JT_MD_T_DRAKE = 21332,
	JT_MD_T_MOONLIGHT = 21333,
	JT_MD_T_BACSOJIN = 21334,
	JT_MD_T_GOBLIN_LEADER = 21335,
	JT_MD_T_KOBOLD_LEADER = 21336,
	JT_MD_T_TURTLE_GENERAL = 21337,
	JT_MD_T_SAMURAI = 21338,
	JT_MD_T_TOAD = 21339,
	JT_MD_T_OSIRIS = 21340,
	JT_MD_T_PHARAOH = 21341,
	JT_MD_T_AMON_RA = 21342,
	JT_MD_T_DARK_SNAKE_LORD = 21343,
	JT_MD_T_ARCHANGELING = 21344,
	JT_MD_T_DEVILING = 21345,
	JT_MD_T_ANGELING = 21346,
	JT_MD_T_GHOSTRING = 21347,
	JT_MD_T_B_YGNIZEM = 21348,
	JT_MD_T_DOPPELGANGER = 21349,
	JT_MD_T_ATROCE = 21350,
	JT_MD_T_ORK_HERO = 21351,
	JT_MD_T_ORC_LORD = 21352,
	JT_MD_T_BAPHOMET = 21353,
	JT_MD_T_DARK_LORD = 21354,
	JT_MD_T_FALLINGBISHOP = 21355,
	JT_MD_T_IFRIT = 21356,
	JT_MD_T_RANDGRIS = 21357,
	JT_MD_T_BEELZEBUB = 21358,
	JT_MD_T_BEELZEBUB_ = 21359,
	JT_EP18_MD_SCHULANG_L = 21360,
	JT_EP18_MD_DEMI_FREYJA_L = 21361,
	JT_EP18_MD_SANARE_L = 21377,
	JT_EP18_MD_HEARTHUNTER_L = 21378,
	JT_G_EP18_LAVA_TOAD = 21379,
	JT_G_EP18_HOT_MOLAR = 21380,
	JT_G_EP18_VOLCARING = 21381,
	JT_E_CHEAP_RAT = 21382,
	JT_E_SWEETS_DROPS = 21384,
	JT_ILL_ANDRE = 21386,
	JT_ILL_SOLDIER_ANDR = 21387,
	JT_ILL_ANDRE_LARVA = 21388,
	JT_ILL_DENIRO = 21389,
	JT_ILL_PIERE = 21390,
	JT_ILL_ANT_EGG = 21391,
	JT_ILL_GIEARTH = 21392,
	JT_ILL_FARMILIAR = 21393,
	JT_ILL_VITATA = 21394,
	JT_ILL_MAYA = 21395,
	JT_G_ILL_ANDRE = 21431,
	JT_G_ILL_DENIRO = 21432,
	JT_G_ILL_PIERE = 21433,
	JT_G_ILL_VITATA = 21435,
	JT_MD_OTARGET = 21439,
	JT_MD_XTARGET = 21440,
	JT_MD_HLGR_HEARTHUNTER = 21441,
	JT_MD_HLGR_BELLARE = 21442,
	JT_MD_HLGR_SANARE = 21443,
	JT_MD_NINJA_GHOST = 21444,
	JT_MD_HAPPY_CLOUD = 21445,
	JT_MD_MR_SEO = 21446,
	JT_MD_SOL = 21447,
	JT_MD_HO = 21448,
	JT_MD_SANGOON = 21449,
	JT_BAPHOMET2 = 21502,
	JT_EP19_NPC_IWIN = 21513,
	JT_EP19_NPC_IWIN_SN = 21514,
	JT_EP19_NPC_IWIN_SY = 21515,
	JT_EP19_NPC_IWIN_SB = 21516,
	JT_EP19_NPC_IWIN_SG = 21517,
	JT_EP19_NPC_IWIN_SR = 21518,
	JT_EP19_NPC_LEHAR = 21519,
	JT_EP19_LIMACINA = 21520,
	JT_EP19_UNFROST_FLOWER = 21521,
	JT_EP19_CALMARING = 21522,
	JT_EP19_ICE_STRAW = 21523,
	JT_EP19_SHINING_SEAWEED = 21524,
	JT_EP19_ICE_GANGU = 21525,
	JT_EP19_RGAN_A = 21526,
	JT_EP19_RGAN_B = 21527,
	JT_EP19_RGAN_C = 21528,
	JT_EP19_RGAN_D = 21529,
	JT_EP19_RGAN_E = 21530,
	JT_EP19_MD_AQUILA = 21531,
	JT_EP19_MD_JUNCEA = 21532,
	JT_EP19_MD_JUNCEA_S = 21533,
	JT_EP19_MD_RGAN_E = 21534,
	JT_EP19_MD_RGAN_D = 21535,
	JT_EP19_MD_HEARTHUNTER_AT = 21536,
	JT_EP19_LIMACINA_BOSS = 21537,
	JT_EP19_WASTED_RGAN_A = 21538,
	JT_EP19_WASTED_RGAN_C = 21539,
	JT_EP19_CAVE_CALMARING = 21540,
	JT_EP19_CAVE_FLOWER = 21541,
	JT_EP19_HALLUCIGENIA = 21542,
	JT_EP19_HALLUCIGENIA_BABY = 21543,
	JT_EP19_ONE_EYE_DOLLOCARIS = 21544,
	JT_EP19_DOLLOCARIS = 21545,
	JT_MD_COMMON = 21546,
	JT_M_INCREASE_SOIL = 21547,
	JT_ECO_CORNUS = 21548,
	JT_ECO_PINGUICULA = 21549,
	JT_ECO_HUNTER_FLY = 21550,
	JT_ECO_ROCKER = 21551,
	JT_ECO_SAVAGE = 21552,
	JT_ECO_FLORA = 21553,
	JT_ECO_HILL_WIND = 21554,
	JT_ECO_MISTRESS = 21555,
	JT_ECO_EXPLOSION = 21556,
	JT_ECO_DELETER = 21557,
	JT_ECO_JAKK = 21558,
	JT_ECO_LAVA_GOLEM = 21559,
	JT_ECO_MAJORUROS = 21560,
	JT_ECO_HYDRO = 21561,
	JT_ECO_ACIDUS = 21562,
	JT_ECO_DETALE = 21563,
	JT_ECO_ICE_TITAN = 21564,
	JT_ECO_SIROMA = 21565,
	JT_ECO_SNOWIER = 21566,
	JT_ECO_CENTIPEDE = 21567,
	JT_ECO_AQUA_ELEMENTAL = 21568,
	JT_ECO_ANGELGOLT = 21569,
	JT_ECO_RHYNCHO = 21570,
	JT_ECO_KTULLANUX = 21571,
	JT_ECO_ANCIENT_MUMMY = 21572,
	JT_ECO_LUDE = 21573,
	JT_ECO_RAGGED_ZOMBIE = 21574,
	JT_ECO_WRAITH = 21575,
	JT_ECO_FLAME_SKULL = 21576,
	JT_ECO_BANSHEE = 21577,
	JT_ECO_KNIGHT_OF_ABYSS = 21578,
	JT_ECO_LORD_OF_DEATH = 21579,
	JT_G_BIJOU = 21580,
	JT_NPC_EDDGA = 21587,
	JT_EP19_MD_AQUILA_B = 21588,
	JT_G_EP19_LIMACINA = 21589,
	JT_EP19_MD_RGAN_ES = 21590,
	JT_CHEWY_TTEOK = 21598,
	JT_EP19_HEARTHUNTER_AT = 21599,
	JT_EP19_RE_RGAN_E = 21600,
	JT_EP19_ET_RGAN_D = 21601,
	JT_VR_BOOK_FAIRY = 21616,
	JT_VR_UNKOWN_MAN = 21617,
	JT_VR_LADY = 21618,
	JT_VR_KNIGHT_SILVER = 21619,
	JT_VR_ELYUMINA = 21620,
	JT_VR_MD_HHA_RKNT = 21621,
	JT_VR_MD_HHA_RYGD = 21622,
	JT_VR_MD_HHA_ACBS = 21623,
	JT_VR_MD_HHA_RNGR = 21624,
	JT_VR_MD_HHA_GX = 21625,
	JT_VR_MD_HHA_SC = 21626,
	JT_VR_MD_HHA_WR = 21627,
	JT_VR_MD_LEVI = 21628,
	JT_VR_MD_LEVI_2 = 21629,
	JT_WILD_ROSE3 = 21630,
	JT_BLUEMOON_LOLI_RURI2 = 21631,
	JT_FARMILIAR2 = 21632,
	JT_VR_AGNES = 21633,
	JT_DARK_ILLUSION2 = 23000,

	// 截止 2022-06-13
	// KRO 最后新的 NPC 定义为: JT_DARK_ILLUSION2 = 23000
	NPC_RANGE3_END,
#endif // Pandas_Update_NPC_Identity_Information

	// Unofficial
	JT_INVISIBLE = 32767,
	JT_FAKENPC = -1
};

// Old NPC range
#define MAX_NPC_CLASS NPC_RANGE2_END
// New NPC range
#define MAX_NPC_CLASS2_START NPC_RANGE3_START
#define MAX_NPC_CLASS2_END NPC_RANGE3_END

//Checks if a given id is a valid npc id. [Skotlex]
//Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001)
#define npcdb_checkid(id) ( ( (id) > NPC_RANGE1_START && (id) < NPC_RANGE1_END ) || (id) == JT_HIDDEN_WARP_NPC || ( (id) > NPC_RANGE2_START && (id) < NPC_RANGE2_END ) || (id) == JT_INVISIBLE || ( (id) > NPC_RANGE3_START && (id) < NPC_RANGE3_END ) )

#ifdef PCRE_SUPPORT
void npc_chat_finalize(struct npc_data* nd);
#endif

//Script NPC events.
enum npce_event : uint8 {
	NPCE_LOGIN,
	NPCE_LOGOUT,
	NPCE_LOADMAP,
	NPCE_BASELVUP,
	NPCE_JOBLVUP,
	NPCE_DIE,
	NPCE_KILLPC,
	NPCE_KILLNPC,

	/************************************************************************/
	/* Filter 类型的过滤事件，这些事件可以被 processhalt 中断                    */
	/************************************************************************/

#ifdef Pandas_NpcFilter_IDENTIFY
	NPCF_IDENTIFY,	// identify_filter_name	// OnPCIdentifyFilter		// 当玩家在装备鉴定列表中选择好装备, 并点击“确定”按钮时触发过滤器
#endif // Pandas_NpcFilter_IDENTIFY

#ifdef Pandas_NpcFilter_ENTERCHAT
	NPCF_ENTERCHAT,	// enterchat_filter_name	// OnPCInChatroomFilter		// 当玩家进入 NPC 开启的聊天室时触发过滤器
#endif // Pandas_NpcFilter_ENTERCHAT

#ifdef Pandas_NpcFilter_INSERT_CARD
	NPCF_INSERT_CARD,	// insert_card_filter_name	// OnPCInsertCardFilter		// 当玩家准备插入卡片时触发过滤器
#endif // Pandas_NpcFilter_INSERT_CARD

#ifdef Pandas_NpcFilter_USE_ITEM
	NPCF_USE_ITEM,	// use_item_filter_name	// OnPCUseItemFilter		// 当玩家准备使用非装备类道具时触发过滤器
#endif // Pandas_NpcFilter_USE_ITEM

#ifdef Pandas_NpcFilter_USE_SKILL
	NPCF_USE_SKILL,	// use_skill_filter_name	// OnPCUseSkillFilter		// 当玩家准备使用技能时触发过滤器
#endif // Pandas_NpcFilter_USE_SKILL

#ifdef Pandas_NpcFilter_ROULETTE_OPEN
	NPCF_ROULETTE_OPEN,	// roulette_open_filter_name	// OnPCOpenRouletteFilter		// 当玩家准备打开乐透大转盘的时候触发过滤器
#endif // Pandas_NpcFilter_ROULETTE_OPEN

#ifdef Pandas_NpcFilter_VIEW_EQUIP
	NPCF_VIEW_EQUIP,	// view_equip_filter_name	// OnPCViewEquipFilter		// 当玩家准备查看某个角色的装备时触发过滤器
#endif // Pandas_NpcFilter_VIEW_EQUIP

#ifdef Pandas_NpcFilter_EQUIP
	NPCF_EQUIP,	// equip_filter_name	// OnPCEquipFilter		// 当玩家准备穿戴装备时触发过滤器
#endif // Pandas_NpcFilter_EQUIP

#ifdef Pandas_NpcFilter_UNEQUIP
	NPCF_UNEQUIP,	// unequip_filter_name	// OnPCUnequipFilter		// 当玩家准备脱下装备时触发过滤器
#endif // Pandas_NpcFilter_UNEQUIP

#ifdef Pandas_NpcFilter_CHANGETITLE
	NPCF_CHANGETITLE,	// changetitle_filter_name	// OnPCChangeTitleFilter		// 当玩家试图变更称号时将触发过滤器
#endif // Pandas_NpcFilter_CHANGETITLE

#ifdef Pandas_NpcFilter_SC_START
	NPCF_SC_START,	// sc_start_filter_name	// OnPCBuffStartFilter		// 当玩家准备获得一个状态(Buff)时触发过滤器
#endif // Pandas_NpcFilter_SC_START

#ifdef Pandas_NpcFilter_USE_REVIVE_TOKEN
	NPCF_USE_REVIVE_TOKEN,	// use_revive_token_filter_name	// OnPCUseReviveTokenFilter		// 当玩家使用菜单中的原地复活之证时触发过滤器
#endif // Pandas_NpcFilter_USE_REVIVE_TOKEN

#ifdef Pandas_NpcFilter_ONECLICK_IDENTIFY
	NPCF_ONECLICK_IDENTIFY,	// oneclick_identify_filter_name	// OnPCUseOCIdentifyFilter		// 当玩家使用一键鉴定道具时触发过滤器
#endif // Pandas_NpcFilter_ONECLICK_IDENTIFY

#ifdef Pandas_NpcFilter_GUILDCREATE
	NPCF_GUILDCREATE,	// guildcreate_filter_name	// OnPCGuildCreateFilter		// 当玩家准备创建公会时触发过滤器
#endif // Pandas_NpcFilter_GUILDCREATE

#ifdef Pandas_NpcFilter_GUILDJOIN
	NPCF_GUILDJOIN,	// guildjoin_filter_name	// OnPCGuildJoinFilter		// 当玩家即将加入公会时触发过滤器
#endif // Pandas_NpcFilter_GUILDJOIN

#ifdef Pandas_NpcFilter_GUILDLEAVE
	NPCF_GUILDLEAVE,	// guildleave_filter_name	// OnPCGuildLeaveFilter		// 当玩家准备离开公会时触发过滤器
#endif // Pandas_NpcFilter_GUILDLEAVE

#ifdef Pandas_NpcFilter_PARTYCREATE
	NPCF_PARTYCREATE,	// partycreate_filter_name	// OnPCPartyCreateFilter		// 当玩家准备创建队伍时触发过滤器
#endif // Pandas_NpcFilter_PARTYCREATE

#ifdef Pandas_NpcFilter_PARTYJOIN
	NPCF_PARTYJOIN,	// partyjoin_filter_name	// OnPCPartyJoinFilter		// 当玩家即将加入队伍时触发过滤器
#endif // Pandas_NpcFilter_PARTYJOIN

#ifdef Pandas_NpcFilter_PARTYLEAVE
	NPCF_PARTYLEAVE,	// partyleave_filter_name	// OnPCPartyLeaveFilter		// 当玩家准备离开队伍时触发过滤器
#endif // Pandas_NpcFilter_PARTYLEAVE

#ifdef Pandas_NpcFilter_DROPITEM
	NPCF_DROPITEM,	// dropitem_filter_name	// OnPCDropItemFilter		// 当玩家准备丢弃或掉落道具时触发过滤器
#endif // Pandas_NpcFilter_DROPITEM

#ifdef Pandas_NpcFilter_CLICKTOMB
	NPCF_CLICKTOMB,	// clicktomb_filter_name	// OnPCClickTombFilter		// 当玩家点击魔物墓碑时触发过滤器
#endif // Pandas_NpcFilter_CLICKTOMB

#ifdef Pandas_NpcFilter_STORAGE_ADD
	NPCF_STORAGE_ADD,	// storage_add_filter_name	// OnPCStorageAddFilter		// 当玩家准备将道具存入仓库时触发过滤器
#endif // Pandas_NpcFilter_STORAGE_ADD

#ifdef Pandas_NpcFilter_STORAGE_DEL
	NPCF_STORAGE_DEL,	// storage_del_filter_name	// OnPCStorageDelFilter		// 当玩家准备将道具取出仓库时触发过滤器
#endif // Pandas_NpcFilter_STORAGE_DEL

#ifdef Pandas_NpcFilter_CART_ADD
	NPCF_CART_ADD,	// cart_add_filter_name	// OnPCCartAddFilter		// 当玩家准备将道具从背包存入手推车时触发过滤器
#endif // Pandas_NpcFilter_CART_ADD

#ifdef Pandas_NpcFilter_CART_DEL
	NPCF_CART_DEL,	// cart_del_filter_name	// OnPCCartDelFilter		// 当玩家准备将道具从手推车取回背包时触发过滤器
#endif // Pandas_NpcFilter_CART_DEL

#ifdef Pandas_NpcFilter_FAVORITE_ADD
	NPCF_FAVORITE_ADD,	// favorite_add_filter_name	// OnPCFavoriteAddFilter		// 当玩家准备将道具移入收藏栏位时触发过滤器 [香草]
#endif // Pandas_NpcFilter_FAVORITE_ADD

#ifdef Pandas_NpcFilter_FAVORITE_DEL
	NPCF_FAVORITE_DEL,	// favorite_del_filter_name	// OnPCFavoriteDelFilter		// 当玩家准备将道具从收藏栏位移出时触发过滤器 [香草]
#endif // Pandas_NpcFilter_FAVORITE_DEL
	// PYHELP - NPCEVENT - INSERT POINT - <Section 2>

	/************************************************************************/
	/* Event  类型的标准事件，这些事件不能被 processhalt 打断                    */
	/************************************************************************/

#ifdef Pandas_NpcEvent_KILLMVP
	NPCE_KILLMVP,	// killmvp_event_name	// OnPCKillMvpEvent		// 当玩家杀死 MVP 魔物后触发事件
#endif // Pandas_NpcEvent_KILLMVP

#ifdef Pandas_NpcEvent_IDENTIFY
	NPCE_IDENTIFY,	// identify_event_name	// OnPCIdentifyEvent		// 当玩家成功鉴定了装备时触发事件
#endif // Pandas_NpcEvent_IDENTIFY

#ifdef Pandas_NpcEvent_INSERT_CARD
	NPCE_INSERT_CARD,	// insert_card_event_name	// OnPCInsertCardEvent		// 当玩家成功插入卡片后触发事件
#endif // Pandas_NpcEvent_INSERT_CARD

#ifdef Pandas_NpcEvent_USE_ITEM
	NPCE_USE_ITEM,	// use_item_event_name	// OnPCUseItemEvent		// 当玩家成功使用非装备类道具后触发事件
#endif // Pandas_NpcEvent_USE_ITEM

#ifdef Pandas_NpcEvent_USE_SKILL
	NPCE_USE_SKILL,	// use_skill_event_name	// OnPCUseSkillEvent		// 当玩家成功使用技能后触发事件
#endif // Pandas_NpcEvent_USE_SKILL

#ifdef Pandas_NpcEvent_EQUIP
	NPCE_EQUIP,	// equip_event_name	// OnPCEquipEvent		// 当玩家成功穿戴一件装备时触发事件
#endif // Pandas_NpcEvent_EQUIP

#ifdef Pandas_NpcEvent_UNEQUIP
	NPCE_UNEQUIP,	// unequip_event_name	// OnPCUnequipEvent		// 当玩家成功脱下一件装备时触发事件
#endif // Pandas_NpcEvent_UNEQUIP
	// PYHELP - NPCEVENT - INSERT POINT - <Section 8>

	/************************************************************************/
	/* Express 类型的快速事件，这些事件将会被立刻执行, 不进事件队列                */
	/************************************************************************/

#ifdef Pandas_NpcExpress_STATCALC
	NPCE_STATCALC,	// statcalc_express_name	// OnPCStatCalcEvent		// 当角色能力被重新计算时触发事件
#endif // Pandas_NpcExpress_STATCALC

#ifdef Pandas_NpcExpress_SC_END
	NPCX_SC_END,	// sc_end_express_name	// OnPCBuffEndExpress		// 当玩家成功解除一个状态(Buff)后触发实时事件
#endif // Pandas_NpcExpress_SC_END

#ifdef Pandas_NpcExpress_SC_START
	NPCX_SC_START,	// sc_start_express_name	// OnPCBuffStartExpress		// 当玩家成功获得一个状态(Buff)后触发实时事件
#endif // Pandas_NpcExpress_SC_START

#ifdef Pandas_NpcExpress_ENTERMAP
	NPCX_ENTERMAP,	// entermap_express_name	// OnPCEnterMapExpress		// 当玩家进入或者改变地图时触发实时事件
#endif // Pandas_NpcExpress_ENTERMAP

#ifdef Pandas_NpcExpress_PROGRESSABORT
	NPCX_PROGRESSABORT,	// progressabort_express_name	// OnPCProgressAbortExpress		// 当 progressbar 进度条被打断时触发实时事件
#endif // Pandas_NpcExpress_PROGRESSABORT

#ifdef Pandas_NpcExpress_UNIT_KILL
	NPCX_UNIT_KILL,	// unit_kill_express_name	// OnUnitKillExpress		// 当某个单位被击杀时触发实时事件
#endif // Pandas_NpcExpress_UNIT_KILL

#ifdef Pandas_NpcExpress_MOBDROPITEM
	NPCX_MOBDROPITEM,	// mobdropitem_express_name	// OnMobDropItemExpress		// 当魔物即将掉落道具时触发实时事件
#endif // Pandas_NpcExpress_MOBDROPITEM

#ifdef Pandas_NpcExpress_PCATTACK
	NPCX_PCATTACK,	// pcattack_express_name	// OnPCAttackExpress		// 当玩家发起攻击并即将进行结算时触发实时事件 [聽風]
#endif // Pandas_NpcExpress_PCATTACK

#ifdef Pandas_NpcExpress_MER_CALL
	NPCX_MER_CALL,	// mer_call_express_name	// OnPCMerCallExpress		// 当玩家成功召唤出佣兵时触发实时事件
#endif // Pandas_NpcExpress_MER_CALL

#ifdef Pandas_NpcExpress_MER_LEAVE
	NPCX_MER_LEAVE,	// mer_leave_express_name	// OnPCMerLeaveExpress		// 当佣兵离开玩家时触发实时事件
#endif // Pandas_NpcExpress_MER_LEAVE

#ifdef Pandas_NpcExpress_PC_TALK
	NPCX_PC_TALK,	// pc_talk_express_name	// OnPCTalkExpress		// 当玩家往聊天框发送信息时触发实时事件 [人鱼姬的思念]
#endif // Pandas_NpcExpress_PC_TALK

#ifdef Pandas_NpcExpress_PCHARMED
	NPCX_PCHARMED,	// pcharmed_express_name	// OnPCHarmedExpress		// 当玩家受到伤害并即将进行结算时触发实时事件 [人鱼姬的思念]
#endif // Pandas_NpcExpress_PCHARMED
	// PYHELP - NPCEVENT - INSERT POINT - <Section 14>
	NPCE_MAX
};

#ifdef Pandas_NpcEvent_KILLMVP
void npc_event_aide_killmvp(map_session_data* sd, map_session_data* mvp_sd, struct mob_data* md);
#endif // Pandas_NpcEvent_KILLMVP
#ifdef Pandas_NpcExpress_UNIT_KILL
void npc_event_aide_unitkill(struct block_list* src, struct block_list* target, uint16 skillid);
#endif // Pandas_NpcExpress_UNIT_KILL
#ifdef Pandas_NpcExpress_MOBDROPITEM
bool npc_express_aide_mobdropitem(struct mob_data* md,
	struct block_list* src, int belond_rid, t_itemid nameid, int drop_rate, int drop_type);
bool npc_express_aide_mobdropitem(struct mob_data* md,
	struct block_list* src, struct item_drop_list* dlist, t_itemid nameid, int drop_rate, int drop_type);
#endif // Pandas_NpcExpress_MOBDROPITEM
#ifdef Pandas_NpcFilter_STORAGE_ADD
bool npc_event_aide_storage_add(map_session_data* sd, struct s_storage* store, int idx, int amount, int item_from);
#endif // Pandas_NpcFilter_STORAGE_ADD
#ifdef Pandas_NpcFilter_STORAGE_DEL
bool npc_event_aide_storage_del(map_session_data* sd, struct s_storage* store, int idx, int amount, int item_to);
#endif // Pandas_NpcFilter_STORAGE_DEL

#ifdef Pandas_Helper_Common_Function
struct event_data* npc_event_data(const char* eventname);
bool npc_event_exists(const char* eventname);
bool npc_event_exists(struct npc_data *nd, const char* eventname);
#endif // Pandas_Helper_Common_Function

struct view_data* npc_get_viewdata(int class_);
int npc_chat_sub(struct block_list* bl, va_list ap);
int npc_event_dequeue(map_session_data* sd,bool free_script_stack=true);
int npc_event(map_session_data* sd, const char* eventname, int ontouch);
int npc_touch_areanpc(map_session_data* sd, int16 m, int16 x, int16 y, struct npc_data* nd);
int npc_touch_area_allnpc(map_session_data* sd, int16 m, int16 x, int16 y);
int npc_touch_areanpc2(struct mob_data *md); // [Skotlex]
int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range);
int npc_touchnext_areanpc(map_session_data* sd,bool leavemap);
int npc_click(map_session_data* sd, struct npc_data* nd);
bool npc_scriptcont(map_session_data* sd, int id, bool closing);
struct npc_data* npc_checknear(map_session_data* sd, struct block_list* bl);
int npc_buysellsel(map_session_data* sd, int id, int type);
e_purchase_result npc_buylist(map_session_data* sd, std::vector<s_npc_buy_list>& item_list);
static int npc_buylist_sub(map_session_data* sd, std::vector<s_npc_buy_list>& item_list, struct npc_data* nd);
uint8 npc_selllist(map_session_data* sd, int list_length, PACKET_CZ_PC_SELL_ITEMLIST_sub* item_list);
e_purchase_result npc_barter_purchase( map_session_data& sd, std::shared_ptr<s_npc_barter> barter, std::vector<s_barter_purchase>& purchases );
void npc_parse_mob2(struct spawn_data* mob);
struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y);
int npc_globalmessage(const char* name,const char* mes);
const char *npc_get_script_event_name(int npce_index);
npc_data* npc_duplicate_npc( npc_data& nd, char name[NPC_NAME_LENGTH + 1], int16 mapid, int16 x, int16 y, int class_, uint8 dir, int16 xs, int16 ys, map_session_data* owner = nullptr );
struct npc_data* npc_duplicate_npc_for_player( struct npc_data& nd, map_session_data& sd );

void npc_setcells(struct npc_data* nd);
void npc_unsetcells(struct npc_data* nd);
bool npc_movenpc(struct npc_data* nd, int16 x, int16 y);
bool npc_is_cloaked(struct npc_data* nd, map_session_data* sd);
bool npc_is_hidden_dynamicnpc( struct npc_data& nd, map_session_data& tsd );
bool npc_enable_target(npc_data& nd, uint32 char_id, e_npcv_status flag);
#define npc_enable(nd, flag) npc_enable_target(nd, 0, flag)
void npc_setdisplayname(struct npc_data* nd, const char* newname);
void npc_setclass(struct npc_data* nd, short class_);
struct npc_data* npc_name2id(const char* name);
int npc_isnear_sub(struct block_list* bl, va_list args);
bool npc_isnear(struct block_list * bl);

int npc_get_new_npc_id(void);

int npc_addsrcfile(const char* name, bool loadscript);
void npc_delsrcfile(const char* name);
int npc_parsesrcfile(const char* filepath);
void do_clear_npc(void);
void do_final_npc(void);
void do_init_npc(void);
void npc_event_do_oninit(void);

int npc_event_do(const char* name);
int npc_event_do_id(const char* name, int rid);
int npc_event_doall(const char* name);
void npc_event_runall( const char* eventname );
int npc_event_doall_id(const char* name, int rid);
int npc_event_doall_path(const char* event_name, const char* path);

int npc_timerevent_start(struct npc_data* nd, int rid);
int npc_timerevent_stop(struct npc_data* nd);
void npc_timerevent_quit(map_session_data* sd);
t_tick npc_gettimerevent_tick(struct npc_data* nd);
int npc_settimerevent_tick(struct npc_data* nd, int newtimer);
int npc_remove_map(struct npc_data* nd);
void npc_unload_duplicates (struct npc_data* nd);
int npc_unload(struct npc_data* nd, bool single);
int npc_reload(void);
void npc_read_event_script(void);
int npc_script_event(map_session_data* sd, enum npce_event type);

int npc_duplicate4instance(struct npc_data *snd, int16 m);
int npc_instanceinit(struct npc_data* nd);
int npc_instancedestroy(struct npc_data* nd);
int npc_cashshop_buy(map_session_data *sd, t_itemid nameid, int amount, int points);

void npc_shop_currency_type(map_session_data *sd, struct npc_data *nd, int cost[2], bool display);

extern struct npc_data* fake_nd;

int npc_cashshop_buylist( map_session_data *sd, int points, std::vector<s_npc_buy_list>& item_list );
bool npc_shop_discount(struct npc_data* nd);

#if PACKETVER >= 20131223
void npc_market_tosql(const char *exname, struct npc_item_list *list);
void npc_market_delfromsql_(const char *exname, t_itemid nameid, bool clear);
#endif

#ifdef SECURE_NPCTIMEOUT
	TIMER_FUNC(npc_secure_timeout_timer);
#endif

// @commands (script-based)
int npc_do_atcmd_event(map_session_data* sd, const char* command, const char* message, const char* eventname);

bool npc_unloadfile( const char* path );

#ifdef Pandas_Struct_Map_Session_Data_EventHalt
bool setProcessHalt(map_session_data *sd, enum npce_event event, bool halt = true);
bool getProcessHalt(map_session_data *sd, enum npce_event event, bool autoreset = true);
bool npc_script_filter(map_session_data* sd, enum npce_event type);
bool npc_script_filter(map_session_data* sd, const char* eventname);
#endif // Pandas_Struct_Map_Session_Data_EventHalt

#ifdef Pandas_Struct_Map_Session_Data_WorkInEvent
enum npce_event npc_get_script_event_type(const char* eventname);
#endif // Pandas_Struct_Map_Session_Data_WorkInEvent

#ifdef Pandas_Struct_Map_Session_Data_EventTrigger
enum npce_trigger : uint16 {
	EVENT_TRIGGER_NONE = 0x00,
	EVENT_TRIGGER_DISABLED = 0x01,
	EVENT_TRIGGER_ONCE = 0x02,
	EVENT_TRIGGER_EVER = 0x03,
	EVENT_TRIGGER_MAX
};

bool setEventTrigger(map_session_data *sd, enum npce_event event, enum npce_trigger trigger_flag);
npce_trigger getEventTrigger(map_session_data *sd, enum npce_event event);
bool isAllowTriggerEvent(map_session_data* sd, enum npce_event event);
#endif // Pandas_Struct_Map_Session_Data_EventTrigger

#ifdef Pandas_ScriptEngine_Express
bool npc_event_is_express(enum npce_event eventtype);
bool npc_event_is_filter(enum npce_event eventtype);
bool npc_event_is_realtime(enum npce_event eventtype);
#endif // Pandas_ScriptEngine_Express

#ifdef Pandas_ScriptCommand_Copynpc
// 以下几个函数主要是为了将 npc.cpp 中定义的几个全局变量导出
DBMap* get_npcname_db_ptr();
int* get_npc_script_ptr();
int* get_npc_shop_ptr();
int* get_npc_warp_ptr();

// 以下几个函数是 rAthena 默认存在的, 这里导出给其他 cpp 使用
struct npc_data *npc_create_npc(int16 m, int16 x, int16 y);
int npc_event_export(struct npc_data *nd, int i);
int npc_timerevent_export(struct npc_data *nd, int i);
void npc_parsename(struct npc_data* nd, const char* name, const char* start, const char* buffer, const char* filepath);
int npc_parseview(const char* w4, const char* start, const char* buffer, const char* filepath);
#endif // Pandas_ScriptCommand_Copynpc

#ifdef Pandas_Character_Title_Controller
bool npc_change_title_event(map_session_data* sd, uint32 title_id, int mode);
#endif // Pandas_Character_Title_Controller

#endif /* NPC_HPP */
